基于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
相关产品推荐
相关产品推荐

