Доступ к вложенному Dict из JSON - PullRequest
0 голосов
/ 27 июня 2018

Ответил: Ответ внизу.

Я использую запросы и json для извлечения некоторых данных из API, и я борюсь с использованием вложенного dict.

Вот мой 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» как список, когда он мне нужен как диктат. Как мне сделать это правильно?

Edit:

Попытка этого for link in jdata["data"]["UniqueLinksClicked"]: выдает ошибку, говорящую, что он ожидает список.

Попытка этого for link in jdata["UniqueLinksClicked"]: приводит к ключевой ошибке, поскольку ["UniqueLinksClicked"] является элементом внутри ["data"] dict.

Edit2:

Я был смущен по поводу именования переменных в части for variable1 in variable2["dict"]:. После некоторой помощи снизу я понял это.

Это должно выглядеть так ...

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

Спасибо за помощь.

1 Ответ

0 голосов
/ 27 июня 2018

Вы можете перебирать ссылки во вложенном цикле. Не используйте одно и то же имя переменной result в двух вложенных циклах! Используйте другое имя переменной во внутреннем цикле.

for link in result["UniqueLinksClicked"]: 
    print(ContactID, link["LinkURL"])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...