[英]How do i filter nested json file using python?
我正在尝试过滤嵌套的 JSON 文件。 我想创建一个新的 json 文件,其中包含“类”和“id”。 源 JSON 文件:
[
{"data": {"id": "ed", "label": "Executive Director (Harriet)"},
"classes": "purple"
},
{"data": {"id": "vp1", "label": "Vice President (Sarah)"},
"classes": "square"
},
{"data": {"id": "vp2", "label": "Vice President (Charlotte)"},
"classes": "square"
},
{"data": {"id": "po1", "label": "Program Officer (Sojourner)"},
"classes": "green diamond"
},
{"data": {"id": "po2", "label": "Program Officer (Sojourner)"},
"classes": "green diamond"
},
{"data": {"id": "pa", "label": "Program Associate (Ellen)"},
"classes": "myimage"
}
]
我的目标是过滤'classes': 'green diamond'具有'id': 'po1' 。 然后删除所有带有 'green diamond' 的类,除了'id': 'po1' 。
结果:
[
{"data": {"id": "ed", "label": "Executive Director (Harriet)"},
"classes": "purple"
},
{"data": {"id": "vp1", "label": "Vice President (Sarah)"},
"classes": "square"
},
{"data": {"id": "vp2", "label": "Vice President (Charlotte)"},
"classes": "square"
},
{"data": {"id": "po1", "label": "Program Officer (Sojourner)"},
"classes": "green diamond"
},
{"data": {"id": "pa", "label": "Program Associate (Ellen)"},
"classes": "myimage"
}]
我尝试使用此代码来获取数据,但它引发了错误:
import json
# Loding the data
with open("D:/bb.json", 'r') as file:
content = file.read()
# Converting json_data to python dictionary format
json_data = json.loads(content)
quantite = -1 # -1 for not found case
for data in json_data[0]:
# Checking for specific pair
if data['classes'] == 'square' and data['id'] == 'vp2':
print(data)
break
我如何过滤这样的 json 文件?
由于加载的json数据只是嵌套的lists和dicts,可以使用普通的list/dict操作; 特别是,列表推导很有用。
import json
with open('input', 'r') as f:
data = json.loads(f.read())
filtered = [x for x in data if not (x['classes'] == 'green diamond' and x['data']['id'] != 'po1')]
with open('output', 'w') as f:
f.write(json.dumps(filtered, indent=2))
结果:
[
{
"data": {
"id": "ed",
"label": "Executive Director (Harriet)"
},
"classes": "purple"
},
{
"data": {
"id": "vp1",
"label": "Vice President (Sarah)"
},
"classes": "square"
},
{
"data": {
"id": "vp2",
"label": "Vice President (Charlotte)"
},
"classes": "square"
},
{
"data": {
"id": "po1",
"label": "Program Officer (Sojourner)"
},
"classes": "green diamond"
},
{
"data": {
"id": "pa",
"label": "Program Associate (Ellen)"
},
"classes": "myimage"
}
]
尝试以下,对您的代码进行了一些更新
import json
# Loding the data
pathToFile = "bb.json"
with open(pathToFile, 'r') as file:
content = file.read()
# Converting json_data to python dictionary format
json_data = json.loads(content)
removeEntryClass = "green diamond"
keepId = "po1"
outputList = []
for entry in json_data:
if entry["classes"] == removeEntryClass and entry["data"]['id'] != keepId :
continue
outputList.append(entry)
print(outputList)
#You can save this list into jour file..
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.