c# - 如何在c#中将json字符串格式化为树格式
问题描述
我有一个来自 Mongo 数据库的数据列表。内容为 JSON 格式。它是一个对象数组,并且值彼此之间具有父关系。父对象为 null("") 表示它是根节点。
[
{
"_id":"5c04fc163838b0772dd9636d",
"Company":"TESTCOMPANY",
"id":"test_uk",
"parent":""
},
{
"_id":"5c05181f0ab89a44a969015d",
"Company":"TESTCOMPANY",
"id":"Gateway",
"parent":"test_uk"
},
{
"_id":"5c0518723838b0772dd9678e",
"Company":"TESTCOMPANY",
"id":"Device1",
"parent":"Gateway"
},
{
"_id":"5c0518723838b077789636e",
"Company":"TESTCOMPANY",
"id":"Device2",
"parent":"Gateway"
},
{
"_id":"5c0518723838b0772dd9636e34",
"Company":"TESTCOMPANY",
"id":"Adapter",
"parent":"test_uk"
},
{
"_id":"5c0518723838b0772dd9636e",
"Company":"TESTCOMPANY",
"id":"AdapterDevice",
"parent":"Adapter"
},
{
"_id":"5c04fc163838b0772dd93454d",
"Company":"TESTCOMPANY",
"id":"test_us",
"parent":""
},
{
"_id":"5c0518723838b0772dd9636e",
"Company":"TESTCOMPANY",
"id":"Device",
"parent":"test_us"
}
]
是否可以在c#中转换为父子格式?
预期格式
[
{
"_id":"5c04fc163838b0772dd9636d",
"Company":"TESTCOMPANY",
"id":"test_uk",
"children":[
{
"_id":"5c05181f0ab89a44a969015d",
"Company":"TESTCOMPANY",
"id":"Gateway",
"children":[
{
"_id":"5c0518723838b0772dd9678e",
"Company":"TESTCOMPANY",
"id":"Device1"
},
{
"_id":"5c0518723838b077789636e",
"Company":"TESTCOMPANY",
"id":"Device2"
}
]
},
{
"_id":"5c0518723838b0772dd9636e34",
"Company":"TESTCOMPANY",
"id":"Adapter",
"children":[ {
"_id":"5c0518723838b0772dd9636e",
"Company":"TESTCOMPANY",
"id":"AdapterDevice"
}]
}]},
{
"_id":"5c04fc163838b0772dd93454d",
"Company":"TESTCOMPANY",
"id":"test_us",
"children":[{
"_id":"5c0518723838b0772dd9636e",
"Company":"TESTCOMPANY",
"id":"Device",
"parent":"test_us"
}]
}
]
我只想在 web Ui 中显示这种格式树结构
解决方案
我不确定它是否足够快,但它可能是一个可能的解决方案:
using System.Collections.Generic;
using Newtonsoft.Json;
namespace ConsoleApp1
{
class Program
{
public class Item
{
[JsonProperty("_id")]
public string Guid { get; set; }
[JsonProperty(PropertyName = "company")]
public string Company { get; set; }
[JsonProperty(PropertyName = "id")]
public string Id { get; set; }
[JsonProperty(PropertyName = "parent")]
public string Parent { get; set; }
[JsonProperty(PropertyName = "children")]
public List<Item> Children { get; set; }
}
private static string jsonString = "[{\"_id\":\"5c04fc163838b0772dd9636d\",\"Company\":\"TESTCOMPANY\",\"id\":\"test_uk\",\"parent\":\"\"},{\"_id\":\"5c05181f0ab89a44a969015d\",\"Company\":\"TESTCOMPANY\",\"id\":\"Gateway\",\"parent\":\"test_uk\"},{\"_id\":\"5c0518723838b0772dd9678e\",\"Company\":\"TESTCOMPANY\",\"id\":\"Device1\",\"parent\":\"Gateway\"},{\"_id\":\"5c0518723838b077789636e\",\"Company\":\"TESTCOMPANY\",\"id\":\"Device2\",\"parent\":\"Gateway\"},{\"_id\":\"5c0518723838b0772dd9636e34\",\"Company\":\"TESTCOMPANY\",\"id\":\"Adapter\",\"parent\":\"test_uk\"},{\"_id\":\"5c0518723838b0772dd9636e\",\"Company\":\"TESTCOMPANY\",\"id\":\"AdapterDevice\",\"parent\":\"Adapter\"},{\"_id\":\"5c04fc163838b0772dd93454d\",\"Company\":\"TESTCOMPANY\",\"id\":\"test_us\",\"parent\":\"\"},{\"_id\":\"5c0518723838b0772dd9636e\",\"Company\":\"TESTCOMPANY\",\"id\":\"Device\",\"parent\":\"test_us\"}]";
static void Main(string[] args)
{
var items = JsonConvert.DeserializeObject<List<Item>>(jsonString);
var dictionary = new Dictionary<string, Item>();
foreach (var item in items)
{
if (!dictionary.ContainsKey(item.Parent))
{
dictionary.Add(item.Id, item);
}
else
{
if (dictionary[item.Parent].Children == null)
dictionary[item.Parent].Children = new List<Item>();
dictionary[item.Parent].Children.Add(item);
}
}
string json = JsonConvert.SerializeObject(dictionary, Formatting.Indented);
System.Console.WriteLine(json);
System.Console.ReadLine();
}
}
}
我刚刚制作了一个使用 Newtonsoft.Json 库的简单控制台应用程序。我认为它最常用于此类目的。
您必须自己找到如何在结果中删除父属性,但我想这应该没什么大不了的。
推荐阅读
- java - 无法在 android 模拟器中安装 apk。应用程序包含 ARM 原生代码
- javascript - 执行外部功能与。使用回调函数——何时使用其中一个?
- python - Python:从纬度/经度坐标获取网格尺寸的有效方法
- flutter - FadeInImage 并非“无缝”
- c# - 返回 TEXT 列的参数化查询始终为 INT 列返回零
- compiler-construction - 打印IR码的clang标志是什么
- chromecast - Chromecast CAF v3:Shaka Player - Widevine,我无法配置证书
- python - 如何使用 pandas DataFrame 检测偏差?
- sorting - 根据最高百分比设置列表中的前 11 名球员(谷歌表格)
- javascript - 任务“服务器”不在您的 gulpfile 中