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

基于KPI父子关系构建JSON层级结构的C#代码问题排查

问题描述

我需要基于第三方API返回的原始JSON数据,结合从数据库获取的KPI父子名称关系,构建出层级化的JSON结构。目前已编写控制台POC代码,但生成的结果不符合预期的层级结构,请求帮忙排查代码问题。

提供的资源

1. KPI父子关系列表

[
  {"parent": "总指标", "child": "业务指标"},
  {"parent": "业务指标", "child": "用户活跃度"},
  {"parent": "总指标", "child": "技术指标"}
]

2. 预期JSON结构

{
  "name": "总指标",
  "children": [
    {
      "name": "业务指标",
      "children": [
        {
          "name": "用户活跃度",
          "value": 85
        }
      ]
    },
    {
      "name": "技术指标",
      "value": 90
    }
  ]
}

3. 第三方API原始响应JSON

[
  {"name": "用户活跃度", "value": 85},
  {"name": "技术指标", "value": 90},
  {"name": "业务指标", "value": null},
  {"name": "总指标", "value": null}
]

4. 控制台POC代码(C#)

using System;
using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json;

public class KpiItem
{
    public string Name { get; set; }
    public decimal? Value { get; set; }
    public List<KpiItem> Children { get; set; } = new List<KpiItem>();
}

public class KpiRelation
{
    public string Parent { get; set; }
    public string Child { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        // 模拟数据库获取的KPI关系
        var kpiRelations = new List<KpiRelation>
        {
            new KpiRelation { Parent = "总指标", Child = "业务指标" },
            new KpiRelation { Parent = "业务指标", Child = "用户活跃度" },
            new KpiRelation { Parent = "总指标", Child = "技术指标" }
        };

        // 模拟API返回的原始数据
        var rawApiData = JsonConvert.DeserializeObject<List<KpiItem>>(@"[
            {""Name"": ""用户活跃度"", ""Value"": 85},
            {""Name"": ""技术指标"", ""Value"": 90},
            {""Name"": ""业务指标"", ""Value"": null},
            {""Name"": ""总指标"", ""Value"": null}
        ]");

        // 尝试构建层级结构
        var kpiMap = rawApiData.ToDictionary(item => item.Name);
        foreach (var relation in kpiRelations)
        {
            if (kpiMap.TryGetValue(relation.Parent, out var parentItem) && kpiMap.TryGetValue(relation.Child, out var childItem))
            {
                parentItem.Children.Add(childItem);
            }
        }

        // 取根节点(假设只有一个根)
        var root = kpiMap.Values.FirstOrDefault(item => !kpiRelations.Any(r => r.Child == item.Name));
        Console.WriteLine(JsonConvert.SerializeObject(root, Formatting.Indented));
    }
}

实际输出结果

{
  "Name": "总指标",
  "Value": null,
  "Children": [
    {
      "Name": "业务指标",
      "Value": null,
      "Children": []
    },
    {
      "Name": "技术指标",
      "Value": 90,
      "Children": []
    }
  ]
}

问题点

实际输出中,"用户活跃度"未被正确嵌套到"业务指标"的children数组下,和预期结构不符,请帮忙排查代码逻辑问题。

内容的提问来源于stack exchange,提问作者Rahul Hendawe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 18:02:32