亲爱的Stackoverflow会员,
我有这个JSON数组,它包含以下项目(基本上):
{
{
'Name': 'x',
'Id': 'y',
'Unsusedstuff' : 'unused',
'Unsusedstuff2' : 'unused2',
'Children': []
},
{ 'Name' : 'xx',
'Id': 'yy',
'Unsusedstuff' : 'unused',
'Unsusedstuff2' : 'unused2',
'Children': [{
'Name': 'xyx',
'Id' : 'yxy',
'Unsusedstuff' : 'unused',
'Unsusedstuff2' : 'unused2',
'Children: []
}
你得到了基本的想法。我想使用以下代码在Python列表中模拟这个(并且只是获取id和名称以及结构):
names = []
def parseNames(col):
for x in col:
if(len(x['Children'])> 0):
names.append({'Name' : x['Name'], 'Id' : x['Id'], 'Children' : parseNames(x['Children'])})
else:
return {'Name' : x['Name'], 'Id' : x['Id']}
但是,它似乎只返回第一个'root'和第一个嵌套文件夹,但不会全部循环它们。
我怎样才能解决这个问题?
问候,
垫
答案 0 :(得分:3)
我读这个的方式,你试图将这棵树转换成只有Id,Name和Children的节点树。在这种情况下,我认为它的方式就像清洁节点一样。
清理节点:
在代码中,那将是:
def clean_node(node):
return {
'Name': node['Name'],
'Id': node['Id'],
'Children': map(clean_node, node['Children']),
}
>>> print map(clean_node, data)
[{'Name': 'x', 'Children': [], 'Id': 'y'}, {'Name': 'xx', 'Children': [{'Name': 'xyx', 'Children': [], 'Id': 'yxy'}], 'Id': 'yy'}]
我发现像这样打破递归问题更容易 - 尝试使用全局变量会让很简单的事情很快变得混乱。
答案 1 :(得分:2)
检查
def parseNames(col):
for x in col:
if(len(x['Children'])> 0):
a = [{
'Name' : x['Name'],
'Id' : x['Id'],
'Children' : x['Children'][0]['Children']
}]
parseNames(a)
names.append({'Name' : x['Name'], 'Id' : x['Id']})
return names
我得到的输出是
[{'Name': 'x', 'Id': 'y'}, {'Name': 'xx', 'Id': 'yy'}, {'Name': 'xx', 'Id': 'yy'}]
答案 2 :(得分:0)
您可以使用以下方法解析Json对象:
import json
response = json.loads(my_string)
现在response
是一个包含每个Json对象的键的字典。