【问题标题】:Accessing Nested Dict from JSON从 JSON 访问嵌套字典
【发布时间】:2018-12-06 16:39:25
【问题描述】:

已回答:在底部回答。

我正在使用请求和 json 从 API 中提取一些数据,但我正在努力使用嵌套字典。

这是我的 JSON。

"data": [
    {
      "ContactId": "123",
      "EmailAddress": "abc@xyz.com",
      "FirstName": null,
      "LastName": null,
      "ClickDate": "6/6/1966",
      "Clicks": "5",
      "IPAddress": "1.1.1.1.1",
      "UserAgent": "IE8.0",
      "UniqueLinksClicked": [
        {
          "LinkURL": "http://link1.com",
          "LinkURL": "http://link2.com",
          "LinkURL": "http://link3.com"
        }
      ]
    }

我可以正常访问所有 ContactID 和其他 1 级内容,但我不知道如何遍历“LinkURL”内容。

这是我的蟒蛇...

result = requests.get(requesturl, headers=headers)
jdata = json.loads(result.content)
for result in jdata["data"]:
    contactID = str([(result["ContactId"])])
    for result in jdata["data"]["UniqueLinksClicked"]: #I'm doing this wrong, but I'm not sure how.
    print(ContactID + " " + str([(result["LinkURL"])]))

它告诉我,当我需要“UniqueLinksClicked”作为字典时,我正在尝试将其处理为列表。我该如何正确地做到这一点?

编辑:

尝试这个for link in jdata["data"]["UniqueLinksClicked"]: 会出现错误,提示它正在等待一个列表。

尝试此for link in jdata["UniqueLinksClicked"]: 会出现关键错误,因为["UniqueLinksClicked"] 是["data"] 字典中的一个项目。

编辑2:

我对@9​​87654327@ 部分中的变量命名感到困惑。在下面的一些帮助下,我想通了。

它应该看起来像这样......

for item in jdata["data"]:
    contactID = str([(item["ContactId"])])
    print(contactID)
    for link in item["UniqueLinksClicked"]:
        print(link["LinkURL"])

感谢您的帮助。

【问题讨论】:

  • 那个 JSON 看起来不对。有一个具有三个 LinkURL 值的对象。键应该是唯一的。这应该是三个不同的对象吗?

标签: python json python-requests


【解决方案1】:

您可以在嵌套循环中迭代链接。不要在两个嵌套循环中使用相同的变量名result!在内部循环中使用不同的变量名。

for link in result["UniqueLinksClicked"]: 
    print(ContactID, link["LinkURL"])

【讨论】:

  • 谢谢。我已经用回复更新了帖子。它需要一个字符串,我是否必须明确将其作为另一个字典加载?
  • 我不明白你的意思。当您尝试此代码时会发生什么?您编辑中的代码与我的答案不同。如果你使用jdata而不是result,显然是行不通的。
  • 这对我来说并不明显,因为我是新手。 :) 感谢您的帮助,这让我得到了答案。我已经把它包括在上面了。
猜你喜欢
  • 1970-01-01
  • 2021-07-18
  • 2017-01-26
  • 2020-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-31
相关资源
最近更新 更多