【发布时间】:2016-02-27 11:37:48
【问题描述】:
我有一个大文件,每一行都包含有效的嵌套json,每个json看起来像(真实数据要大得多,所以这里的json只是为了说明而已):
{"location":{"town":"Rome","groupe":"Advanced",
"school":{"SchoolGroupe":"TrowMet", "SchoolName":"VeronM"}},
"id":"145",
"Mother":{"MotherName":"Helen","MotherAge":"46"},"NGlobalNote":2,
"Father":{"FatherName":"Peter","FatherAge":"51"},
"Study":[{
"Teacher":["MrCrock","MrDaniel"],
"Field":{"Master1":["Marketing", "Politics", "Philosophy"],
"Master2":["Economics", "Management"], "ExamCode": "1256"}
}],
"season":["summer","spring"]}
我需要解析这个文件,以便从每个 json 中只提取一些键值,以获得应该如下所示的数据框:
Groupe Id MotherName FatherName Master2
Advanced 56 Laure James Economics, Management
Middle 11 Ann Nicolas Web-development
Advanced 6 Helen Franc Literature, English Language
我使用 method proposed me in the other question .get 但它不适用于嵌套的 json,例如,如果我尝试:
def extract_data(data):
""" convert 1 json dict to records for import"""
dummy = {}
jfile = json.loads(data.strip())
return (
jfile.get('Study', dummy).get('Field', np.nan).get('Master1',np.nan),
jfile.get('location', dummy).get('groupe', np.nan))
对于这一行jfile.get('Study', dummy).get('Field', np.nan).get('Master1', np.nan) 它会抛出一个错误:
AttributeError: 'list' 对象没有属性 'get'
很明显,这是因为"Study" 的值不是字典,也不是列表,而是一个有效的 json!我该如何处理这个问题?是否存在类似 .get 但适用于 json 的方法?我想还有另一种选择:解码这个json然后用.get解析它,但问题是它在另一个json的核心,所以我不知道如何解码!
【问题讨论】:
-
而不是将最后一次调用链接到
get,您可以检查您在键Master1下获得的内容是否是一个列表,然后获取所有列表值或单个值,如果值为Master1不是列表 -
顺便问一下,你能把你帖子里的
get('Master1','np.nan)改成get('Master1',np.nan)吗? -
@YannisP。您能否更准确地了解我如何实施它?代码和平,方法?
-
我希望你能用 Forge 的回答解决这个问题