首页 > 解决方案 > 使用python for循环获取具有值的json对象

问题描述

当我使用:

for reports in raw_data:
        for names in reports["names"]:
                report_name = json.dumps(names).strip('"')
                report_names.append(report_name)

我得到键/对象名称:'report1', ...

当我使用:

for reports in raw_data:
        for names in reports["names"].values():
                report_name = json.dumps(names).strip('"')
                report_names.append(report_name)

我得到了对象的值:'name1', ...

如何将对象和值放在一起,例如:'report1': 'name1', ...

json:

[
  {
    "names": {
      "report1": "name1",
      "report2": "name2"
    }
  },
  {
    "names": {
      "report3": "name3",
      "report4": "name4"
    }
  }
]

标签: pythonjson

解决方案


您需要遍历对象中的每个字典,然后从以下位置提取每个键:值对items()

data = [
  {
    "names": {
      "report1": "name1",
      "report2": "name2"
    }
  },
  {
    "names": {
      "report3": "name3",
      "report4": "name4"
    }
  }
]

for d in data:
    for k, v in d["names"].items():
        print(k, v)

结果:

report1 name1
report2 name2
report3 name3
report4 name4

或者,如果您可以打印出元组对:

for d in data:
    for pair in d["names"].items():
        print(pair)

# ('report1', 'name1')
# ('report2', 'name2')
# ('report3', 'name3')
# ('report4', 'name4')

如果您想要列表中的所有对,请使用列表推导

[pair for d in data for pair in d["names"].items()]
# [('report1', 'name1'), ('report2', 'name2'), ('report3', 'name3'), ('report4', 'name4')]

推荐阅读