我有一些棘手的数据要处理。基本上,我想将结构放在一个扁平的列表中。
用简单的英语制作:
-
"level":1
标签是数组的关键 -
"level":2
或更高标签应嵌套在数组中 - 如果没有
"level":1
,请将其添加到通用NoLevel1
列表 - 它应该将
tags
组合在一起if
它们具有相同的"level":1
值
我的数据看起来像这样:
[{
"title": "Set 1",
"tag": [{
"name": "Animals",
"level": 1
},
{ "name": "Cat",
"level": 2
},
{ "name": "Dog",
"level": 3
}
]
},
{
"title": "Set 2",
"tag": [{
"name": "Fruits",
"level": 1
},
{ "name": "Apple",
"level": 2
}]
},
{
"title": "Set 3",
"tag": [{
"name": "Fruits",
"level": 1
},
{ "name": "Orange",
"level": 3
}]
},
{
"title": "Set 4",
"tag": [{
"name": "Cars",
"level": 2
}]
},
{
"title": "Set 5",
"tag": [{
"name": "Random!",
"level": 3
}]
}]
我所需的输出是:
[{
"name": "Animals",
"level":1,
"tag_child": [{
"name": "Cat",
"level": 2
},
{ "name": "Dog",
"level": 3
}]
},
{
"name": "Fruits",
"level":1,
"tag_child": [{
"name": "Apple",
"level": 2
},
{ "name": "Orange",
"level": 3
}]
},
{
"name": "NoLevel1",
"level":1,
"tag_child": [{
"name": "Cars",
"level": 2
},
{ "name": "Random!",
"level": 3
}]
}]
我已经加载了数据,但在提供数据的结构方面还没有进一步。
import json
with open("Test.json") as json_file:
l = json_data = json.load(json_file)
for i in thedata:
if i['tag']['level'] > 1:
我没有测试过,但是类似的东西应该起作用。如果不是您要寻找的话,请自己进行更改。但这肯定应该让您开始。
import json
with open("Test.json") as json_file:
json_data = json.load(json_file)
generic = []
result = []
for i in json_data:
if any(d['level'] == 1 for d in i['tag']):
tag_data = {}
tag_child = []
for tag in i['tag']:
if tag['level'] == 1:
tag_data['name'] = tag['name']
tag_data['level'] = 1
else:
tag_child.append(tag)
filtered = {tuple((k, d[k]) for k in sorted(d) if k in ['name']): d for d in tag_child}
tag_data['tag_child'] = list(filtered.values())
if any(d['name'] == tag_data['name'] for d in result):
for t in result:
if t['name'] == tag_data['name']:
t['tag_child'] = t['tag_child'] + tag_child
filtered = {tuple((k, d[k]) for k in sorted(d) if k in ['name']): d for d in t['tag_child']}
t['tag_child'] = list(filtered.values())
else:
result.append(tag_data)
else:
for tag in i['tag']:
generic.append(tag)
tag_data = {}
tag_data['name'] = 'NoLevel1'
tag_data['level'] = 1
tag_data['tag_child'] = generic
result.append(tag_data)
print(json.dumps(result))