循环嵌套的JSON元素

时间:2017-11-30 00:22:55

标签: python json

所以我有一个看起来像这样的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

如何循环查看让我检索域的信息,嵌套的A information, the nested NS`信息等?

我试过这样做:

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

徒劳。谢谢你的帮助!

2 个答案:

答案 0 :(得分:1)

您可以这样做:

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)

答案 1 :(得分:1)

来自JSON的foo值将成为列表,因此您可以使用data循环遍历其包含的词典:

for

然后,您只需使用for inner in data: inner['Domain']即可访问与所需密钥相关联的值。要迭代A记录,请在inner['A']上使用另一个循环。

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

inner['A']

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