你好我有这个例子json字符串:
{
"property1":"value1",
"property2":"value2",
"anotherObject":{
"property1":"anothervalue1",
"property2":"anothervalue2",
"anotherOfAnother":{
"property1":"value1"
}
}
}
我需要把所有其他的json对象都放进去,然后传递到第一层,保留导航路径。所以示例Json变成:
{
"property1":"value1",
"property2":"value2",
"anotherObject.property1":"anothervalue1",
"anotherObject.property2":"anothervalue2",
"anotherObject.anotherOfAnother.Property1":"value1"
}
我怎么能做到呢?我在.Net 6上提前谢谢
我被卡住了,我还没有尝试过任何东西。我正在寻找关于使用JObject或JsonConvert来达到目标的有效方法的想法。
2条答案
按热度按时间jv4diomz1#
可以使用Path属性
xghobddn2#
这是一个复杂度为O(n)的问题,我会使用Newtonsoft's
JObject.Parse(string)
函数来得到一个可枚举的树,你可以在递归循环中遍历.Children()
。每个
JToken
元素都有一个属性Path
,它是您在新JSON对象中要寻找的点标记键。为了获得O(n)的性能,您可以在运行时构造一个新文档,但使用递归来构造一个键值对的平面列表,并简单地从新列表中构建迭代后的文档可能会更容易(这给您带来了O(n)x2)。由于json的嵌套特性,修改现有文档虽然可能,但很可能是多余的工作。
您将不得不处理根JObject和每个嵌套标记之间的差异,并且必须弄清楚您希望对数组做什么,但这应该可以让您完成大部分工作。