【问题标题】:Looping over Nested JSON Elements循环嵌套的 JSON 元素
【发布时间】:2017-11-30 00:22:55
【问题描述】:

所以我有一个如下所示的 JSON:

[
  {
    "Domain": "apple.com",
    "A": [
      "17.142.160.59",
      "17.172.224.47",
      "17.178.96.59"
    ],
    "NS": [
      "c.ns.apple.com.",
      "b.ns.apple.com.",
      "a.ns.apple.com.",
      "f.ns.apple.com.",
      "nserver5.apple.com.",
      "nserver6.apple.com.",
      "d.ns.apple.com.",
      "e.ns.apple.com."
    ]
  }
]

虽然我可以像 viz 一样手动检索嵌套信息。

print(data[0]["Domain"]) --- Returns: apple.com
print(data[0]["A"][0]) --- Returns: 17.142.160.59

如何循环访问让我检索域的信息、嵌套的 Ainformation, the nestedNS` 信息等?

我试过这样做:

for i in data["Domain"]:
   print(data[i]["Domain"])
   for j in ... // could not figure out, either way first loop fails.

徒劳。感谢您的帮助!

【问题讨论】:

标签: python json


【解决方案1】:

来自 JSON 的 data 值将是一个列表,因此您可以使用 for 循环遍历它包含的字典:

for inner in data:

然后您可以使用inner['Domain']inner['A'] 来访问与您想要的键关联的值。要遍历 A 记录,请在 inner['A'] 上使用另一个循环。

这是一组嵌套循环,我认为它们可以满足您的需求:

for inner in data:
    print("Domain:", inner['Domain'])
    for ip in inner['A']:
        print(" IP:", ip)
    for ns in inner['NS']:
        print(" NS:", ns)

您当然可以对数据执行其他操作,而不是打印它。

【讨论】:

    【解决方案2】:

    你可以这样做:

    def get_values(data, scope=None):
        for entry in data:
            for prop, value in entry.items():
                if scope is not None and prop != scope:
                    continue
                if not isinstance(value, list):
                    yield value
                else:
                    for elem in value:
                        yield elem
    

    然后:

    for value in get_values(data):
        print(value)
    

    您还可以:

    for value in get_values(data, scope="NS"):
        print(value)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-14
      • 2014-05-03
      • 2015-07-05
      • 1970-01-01
      • 2018-09-19
      • 1970-01-01
      • 2023-01-25
      • 2020-11-29
      相关资源
      最近更新 更多