You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core如何将父子级数据合并为单个JSON数组?

解决ASP.NET Core中父级-子级JSON结构合并的问题

看起来你现在拿到的是扁平的父-子对列表,想要把相同父级的子项合并到一个数组里对吧?我来给你一步步说怎么实现:

第一步:定义对应的模型类

首先你需要两个模型,分别用来表示子项和包含子项列表的父级:

// 子项模型
public class CategoryChild
{
    public string Child { get; set; }
    public string ChildID { get; set; }
}

// 父级模型,包含子项集合
public class CategoryParent
{
    public string Parent { get; set; }
    public string ParentID { get; set; }
    public List<CategoryChild> Children { get; set; } = new List<CategoryChild>();
}

另外,如果你现在从数据库查询出来的是扁平结构(就是每个父-子对一条记录),可以先定义一个临时的扁平模型来接收:

// 临时扁平模型,对应你当前查询的结果结构
public class FlatCategory
{
    public string Parent { get; set; }
    public string ParentID { get; set; }
    public string Child { get; set; }
    public string ChildID { get; set; }
}

第二步:分组转换数据

在你的控制器方法里,先获取到扁平的数据,然后用LINQ的GroupBy来把相同父级的子项归到一起,再转换成我们需要的结构:

[HttpGet]
public IActionResult GetGroupedCategories()
{
    // 替换成你实际的数据库查询逻辑,获取扁平的父-子对列表
    var flatData = _yourDbContext.Categories
        .Select(c => new FlatCategory
        {
            Parent = c.ParentName,
            ParentID = c.ParentId,
            Child = c.ChildName,
            ChildID = c.ChildId
        })
        .ToList();

    // 分组并构建目标结构
    var groupedResult = flatData
        // 按父级ID和名称分组(用ID确保唯一,避免同名不同ID的父级被错误合并)
        .GroupBy(item => new { item.ParentID, item.Parent })
        .Select(group => new CategoryParent
        {
            ParentID = group.Key.ParentID,
            Parent = group.Key.Parent,
            // 把分组里的子项转换成CategoryChild列表
            Children = group.Select(childItem => new CategoryChild
            {
                ChildID = childItem.ChildID,
                Child = childItem.Child
            }).ToList()
        })
        .ToList();

    return Ok(groupedResult);
}

第三步:验证返回结果

这样处理后,返回的JSON就会是你想要的结构:

[
  {
    "parent": "Kitchen & Dining",
    "parentID": "QojQhZoUTkG1VhOMJVOBmw==",
    "children": [
      { "child": "Bakeware", "childID": "BamlddxbUk2lx3uhaT4Hbg==" },
      // 该父级下的其他子项
    ]
  },
  {
    "parent": "Hobbies",
    "parentID": "yTCm3n8OCUSDQBzDt1f9Hw==",
    "children": [
      { "child": "Travel", "childID": "CAqwuhPIL02T2ufP/Tl0CA==" }
    ]
  }
]

需要注意的点:

  • 分组的时候一定要用ParentID作为分组依据之一,避免出现父级名称相同但ID不同的情况被错误合并。
  • 如果你的数据库查询已经有分组逻辑,也可以直接在查询层面做分组,这样性能会更好,尤其是数据量比较大的时候。

内容的提问来源于stack exchange,提问作者Hasan Rasheed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:29:24