我正在尝试使用Python解析以下学生成绩报告JSON
{
"report":[
{
"enrollment": "rit2011001",
"name": "Julia",
"subject":[
{
"code": "DSA",
"grade": "A"
}
]
},
{
"enrollment": "rit2011020",
"name": "Samantha",
"subject":[
{
"code": "COM",
"grade": "B"
},
{
"code": "DSA",
"grade": "A"
}
]
}
]
}
这样,报告应该首先按代码升序排序,然后按年级升序排序,然后按注册升序排序。下面是输出应该是什么样子
COM B rit2011020 Samantha
DSA A rit2011001 Julia
DSA A rit2011020 Samantha
以下是我需要帮助的不完整代码片段:
import json
data='''{
"report":[
{
"enrollment": "rit2011001",
"name": "Julia",
"subject":[
{
"code": "DSA",
"grade": "A"
}
]
},
{
"enrollment": "rit2011020",
"name": "Samantha",
"subject":[
{
"code": "COM",
"grade": "B"
},
{
"code": "DSA",
"grade": "A"
}
]
}
]
}'''
print data #for debug
parsed_json = json.loads(data)
print parsed_json #for debug
for key,value in sorted(parsed_json.items()):
print key,value
我不知道如何应用连续过滤来获得结果。
发布于 2019-01-15 03:06:44
尝试使用带有print
的嵌套循环
import json
data='''{
"report":[
{
"enrollment": "rit2011001",
"name": "Julia",
"subject":[
{
"code": "DSA",
"grade": "A"
}
]
},
{
"enrollment": "rit2011020",
"name": "Samantha",
"subject":[
{
"code": "COM",
"grade": "B"
},
{
"code": "DSA",
"grade": "A"
}
]
}
]
}'''
print data #for debug
parsed_json = json.loads(data)
print parsed_json #for debug
for i in parsed_json['report']:
for x in i['subject']:
print x['code'],x['grade'],i['enrollment'],i['name']
输出:
DSA A rit2011001 Julia
COM B rit2011020 Samantha
DSA A rit2011020 Samantha
如果关心帧的顺序:
import json
data='''{
"report":[
{
"enrollment": "rit2011001",
"name": "Julia",
"subject":[
{
"code": "DSA",
"grade": "A"
}
]
},
{
"enrollment": "rit2011020",
"name": "Samantha",
"subject":[
{
"code": "COM",
"grade": "B"
},
{
"code": "DSA",
"grade": "A"
}
]
}
]
}'''
print data #for debug
parsed_json = json.loads(data)
print parsed_json #for debug
l=[]
for i in parsed_json['report']:
for x in i['subject']:
l.append(' '.join([x['code'],x['grade'],i['enrollment'],i['name']]))
print('\n'.join(sorted(l)))
发布于 2019-01-15 03:41:50
如果您愿意使用一个非常流行的外部库来进行数据分析,那么您可以将pandas
与json_normalize()
结合使用,例如:
In []:
from pandas.io.json import json_normalize
df = json_normalize(parsed_json['report'], 'subject', ['enrollment', 'name'])
df.sort_values(['code', 'grade', 'enrollment']).reset_index(drop=True)
Out[]:
code grade enrollment name
0 COM B rit2011020 Samantha
1 DSA A rit2011001 Julia
2 DSA A rit2011020 Samantha
https://stackoverflow.com/questions/54192135
复制