gpt4 book ai didi

python - 嵌套 json 的 .get 方法不起作用

转载 作者:行者123 更新时间:2023-11-30 22:59:37 24 4
gpt4 key购买 nike

我有一个大文件,每行都包含有效的嵌套 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' object has no attribute 'get'

显然发生这种情况是因为“Study”的值不是字典,也不是列表,而是有效的json!我该如何处理这个问题?是否存在类似于 .get 但适用于 json 的方法?我想还有另一种选择:解码这个json,然后用 .get 解析它,但问题是它位于另一个json的核心,所以我不知道如何解码它!

最佳答案

数据 是有效的 JSON格式化字符串。 JSON 包含四个基本元素:

  • 对象:用大括号定义{}
  • 数组:用大括号定义[]
  • :可以是字符串数字对象数组,或文字 truefalsenull
  • 字符串:由双引号定义,包含 Unicode 字符或常见的反斜杠转义符


使用json.loads将以递归方式将字符串转换为Python 对象。这意味着每个内部 JSON 元素都将表示为一个 python object

因此:jfile.get('Study') ---> python 列表


要检索 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')

关于python - 嵌套 json 的 .get 方法不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35669227/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com