问题描述
所以我在 JSON 中有一个像这样的扁平树,作为对象数组:
[{
aid: "id3",data: ["id1","id2"]
},{
aid: "id1",data: ["id3",{
aid: "id2",nested_data: {aid: "id4",atype: "nested","id3"]},data: []
}]
我想收集那棵树并用递归循环将 id 解析为数据,就像这样(假设我们从 "id3"
开始):
{
"aid":"id3","payload":"1","data":[
{
"id1":{
"aid":"id1","data":[
{
"id3":null
},{
"id2":null
}
]
}
},{
"id2":{
"aid":"id2","nested_data":{
"aid":"id4","atype":"nested","data":[
{
"id1":null
},{
"id3":null
}
]
},"data":[
]
}
}
]
}
这样我们就可以进行广度优先搜索,并在第一次进入时将某些字段解析为 "value": "object with that field"
和 "value": Null
如何在python 3中做这样的事情?
解决方法
除了您的结构在语法方面存在的所有问题(标识符必须在引号内等)之外,下面的代码将为您提供所需的答案。
但是您应该仔细考虑自己在做什么,并考虑以下几点:
- 使用您提供的平面结构中表达的关系意味着您将有无限递归,因为您的项目包含其他项目,而其他项目又包含第一个项目(例如
id3
包括 {{1} },这又包括id1
。因此,您必须定义停止条件,或者确保这不会发生在您的扁平结构中。 - 你最初的平面结构最好是字典的形式,而不是一个 {id,data} 对的列表。这就是为什么下面的代码做的第一件事就是转换它。
- 您最终所需的结构在所包含的信息方面存在大量冗余。考虑简化它。
- 最后,您没有提到“nested_data”节点以及如何处理它们。我只是假设如果存在,则需要进一步扩展。
请考虑尝试在您的问题中提供一些上下文,一些真实的数据示例(我相信提供的数据不是真实数据,因此存在不一致和冗余),并尝试自己并提供您的努力;这是学习的唯一途径。
id3