【发布时间】:2016-07-24 01:14:29
【问题描述】:
* 尽管其他用户对我的标题进行了编辑,但我正在寻找一种使用来自 C# 的 JSON.NET 库的解决方案 *
包含伪代码的回复很好! :)
我正在尝试使用 JSON 数据集提供的分层数据。我正在使用 C# 和 JSON.NET。如果有帮助的话,我愿意将 Linq 一般用于 JSON.NET,尤其是 Linq;否则,使用非 Linq C#/JSON.NET 就可以了。
理想情况下,我试图优雅地完成两件事:
我想提取表示每个分支和该分支自身属性的 JSON,而不是它的子(嵌套)分支对象(稍后我会详细解释)。
我想在创建分支对象时跟踪父节点。
如需进一步考虑,请参考以下 JSON 摘录:
{
"Branch1": {
"Prop1A" : "1A",
"Prop1B" : "1B",
"Prop1C" : "1C",
"Branch2" : {
"Prop2A" : "2A",
"Prop2B" : "2B",
"Prop2C" : "2C",
"Branch3" : {
"Prop3A" : "3A",
"Prop3B" : "3B",
"Prop3C" : "3C"
}
}
}
}
与目标 1 相关(上图): 给定由嵌套 JSON 对象组成的 JSON,我只想为每个分支挑选简单的(字符串)属性。例如,我想提取仅包含 Prop1A、Prop1B 和 Prop1C 属性的 Branch1 的 JSON。然后我想提取仅包含 Prop2A、Prop2B 和 Prop2C 属性等的 Branch2 的 JSON。我意识到我可以将整个 JSON 表示为 JSON.NET JToken 对象,然后遍历它的 Children() 并只看对于 JTokenType.Property 类型,但也许有一种更优雅的方法可以使用 Linq 快速挑选出属性类型......?最后,我将拥有三个独立的 JSON 对象,如下所示:
JSON 对象 1:
{
"Prop1A" : "1A",
"Prop1B" : "1B",
"Prop1C" : "1C"
}
JSON 对象 2:
{
"Prop2A" : "2A",
"Prop2B" : "2B",
"Prop2C" : "2C"
}
JSON 对象 3:
{ “Prop3A”:“3A”, “Prop3B”:“3B”, “Prop3C”:“3C” }
与目标 2 相关(上图): 理想情况下,上面提取的每个 JSON 也将具有指示其父级的属性。因此,最终的 JSON 对象看起来像这样:
{
"Prop1A" : "1A",
"Prop1B" : "1B",
"Prop1C" : "1C",
"Parent" : ""
}
还有:
{
"Prop2A" : "2A",
"Prop2B" : "2B",
"Prop2C" : "2C",
"Parent" : "Branch1"
}
还有:
{
"Prop3A" : "3A",
"Prop3B" : "3B",
"Prop3C" : "3C",
"Parent" : "Branch2"
}
有什么想法吗?
【问题讨论】:
-
为什么
"Branch1"不是第一个"Prop1A"对象的父对象?毕竟那是直接的父属性名称。 -
因为本例中的 JSON 表示 JSON 对象的父子层次关系。在这种情况下,对象 1 在对象 2 的父对象中,即对象 3 的父对象。对象 1 映射到 Branch1(一个没有父对象但有一个子分支的 JSON 对象--Branch 2);对象 2 映射到 Branch2(一个 JSON 对象,Branch1 作为其父级,并且有一个子分支--Branch 3);对象 3 映射到 Branch3(一个以 Branch2 作为其父分支且没有子分支的 JSON 对象)。