我有一个样本Json,如下所述
[{
"Name": "Kim",
"Details": {
"Age": 43,
"Gender": "Male",
"Education": [{
"Primary": "Xavier",
"Percentage": 90,
"subject": [{
"sub": "Math",
"Perf": "Good"
}],
"Marks": [{
"Mark": 90,
"Grade": "A"
}]
},
{
"Secondary": "Anthony",
"Percentage": 98,
"subject": [{
"sub": "Math",
"Perf": "Good"
}],
"Marks": [{
"Mark": 100,
"Grade": "S"
}]
},
{
"Bachelor": "Boston",
"Percentage": 90,
"subject": [{
"sub": "Computers",
"Perf": "Good"
}],
"Marks": [{
"Mark": 90,
"Grade": "A"
}]
},
{
"PostGrad": "Boston",
"Percentage": 90,
"subject": [{
"sub": "CNN",
"Perf": "Good"
}],
"Marks": [{
"Mark": 90,
"Grade": "A"
}]
}]
}
}]
我只需要从整个Json中提取sub和Mark。
我得到了必要的输出,但问题是我使用了多个for循环,下面提到的是我获取子和标记的方法,
import json
sampleJson = open('C:\Users\SampleJson.json')
sampleJsonData = json.loads(sampleJson.read())
resArray=[]
for i in range(len(sampleJsonData)):
for j in range(len(sampleJsonData[i]["Details"])):
for k in range(len(sampleJsonData[i]["Details"]["Education"])):
for l in range(len(sampleJsonData[i]["Details"]["Education"])):
for y in range(len(sampleJsonData[i]["Details"]["Education"][l]["subject"])):
sub = (sampleJsonData[i]["Details"]["Education"][l]["subject"][y]["sub"])
for z in range(len(sampleJsonData[i]["Details"]["Education"][l]["Marks"])):
marks = sampleJsonData[i]["Details"]["Education"][l]["Marks"][z]["Mark"]
无论如何,我是否有可能将for循环的使用减少到零。
我需要进一步使用sub和Mark值,因为临时度量将这些值存储在不同的变量中。
我对python还比较陌生,请帮我一下。感谢
您可以使用列表理解。根据您的示例,假设数据由一个包含一个字典的列表组成,它可能看起来像这样:
[(i['subject'][0]['sub'], i['Marks'][0]['Mark']) for i in sampleJsonData[0]['Details']['Education']]
输出:
[('Math', 90), ('Math', 100), ('Computers', 90), ('CNN', 90)]