我有一个大文件,每行包含有效的嵌套json ,每个json看起来都像(真实数据要大得多,所以这个json的和平只会用于说明):< / p>
{"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:&#39; list&#39;对象没有属性&#39; get&#39;
显然它发生是因为"Study"
的值不是字典,既不是列表,也不是有效的json!我该如何处理这个问题?是否存在类似.get的方法,但对于json?我想还有另外一个选择:解码这个json,然后用.get
解析它,但问题是它在另一个json的核心,所以我不知道如何解码它!
答案 0 :(得分:3)
Data
是有效的JSON
格式化字符串。 JSON
包含四个基本要素:
{}
[]
Unicode
个字符或公共backslash escapes
使用json.loads
会递归地将string
转换为python object
。这意味着每个内部JSON
元素都将表示为python object
。
因此:
jfile.get('Study')
---&gt; python list
要检索Field
,您应该遍历研究列表:
file = json.loads(data.strip())
study_list = jfile.get('Study', []) # don't set default value with different type
for item in study_list:
print item.get('Field')