【问题标题】:Use Python to extract content with the same field in JSON regardless of the hierarchy使用 Python 提取 JSON 中具有相同字段的内容,而不考虑层次结构
【发布时间】:2021-06-18 09:32:45
【问题描述】:

这是我当前 json 文件的演示:

school=
[
{'grade':6,
'students':
[
{'id': 300515,
 'name': 'George',
 'height': 1.75},
{'id': 300516,
 'name': 'Lucy',
 'height': 1.65}]},
{'grade':5,
'students':
[
{'id': 300517,
 'name': 'Edward',
 'height': 1.80},
{'id': 300518,
 'name': 'Olivia',
 'height': 1.70}]}
]

我想要实现的是将所有学生姓名连接到一个字符串中,无论他们属于哪个年级(即“George Lucy Edward Olivia”)。

但是,真实数据的层次结构比这个演示复杂得多,这意味着这里在school 级别之上还有更多层(也许你可以想象这个演示中的地区、城市、州等) )。目前我只能使用多个for 循环来实现这一点。

但我想知道是否有任何捷径可以实现这一点。例如,使用一个函数提取json中的所有内容只要它们属于同一字段且不分层次。谢谢。

【问题讨论】:

  • 是的,您可以使用递归来做到这一点。

标签: python json parsing


【解决方案1】:

您可以通过这种方式使用递归。


school=[
    {'grade':6,'students':[{'id': 300515, 'name': 'George', 'height': 1.75},
    {'id': 300516, 'name': 'Lucy', 'height': 1.65}]},
    {'grade':5,'students':[{'id': 300517, 'name': 'Edward', 'height': 1.80},
    {'id': 300518, 'name': 'Olivia','height': 1.70}]}
]


def getNames(json,names):
  if isinstance(json,dict):
    for key,value in json.items():
      if 'name' is key:
        names.append(value)
      if isinstance(value,list):
        for line in value:
          if isinstance(line,dict):
            getNames(line,names)
  elif isinstance(json,list):
    for line in json:
      if isinstance(line,dict):
        getNames(line,names)


names = []
getNames(school,names)
print(names)

如果名称作为上述 json 中的键存在,则其值将被添加到名称列表中,否则列表保持为空。

【讨论】:

    猜你喜欢
    • 2020-02-20
    • 1970-01-01
    • 2014-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多