Итерация JSON и добавление в словарь? - PullRequest
0 голосов
/ 04 февраля 2020

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

То, что я пробовал, работает по большей части, однако, когда я печатаю содержимое объекта словаря, он возвращает только самую новую пару ключ / значение ... Я хотел бы знать, как ДОБАВИТЬ в словарь, так что, когда я его распечатываю, я получаю хороший длинный список пар ключ / значение.

Вот код:

r=requests.get(url + id, headers=h, params=p)
inbound_dict={}
inbound=json.loads(r.text)
for item in inbound['messages']:
    inbound_dict[item['conversationId']] = item['body']
print(inbound_dict)

Я знаю, что должно быть что-то простое, что мне не хватает. Я пробовал inbound_dict.append(), но, очевидно, это не совсем верно.

Вы можете видеть на изображении ниже, где находятся красные линии, которые просто показывают, где заканчиваются каждый из json «экземпляров». Для контекста, это приложение для обмена смс сообщениями, и каждый ответ json представляет одно сообщение.

Here is a sample output of the returned json that I need to parse through

И вот первые 2 "json" в текстовом виде:

b'{"id":1005672,"messages":[{"id":4461048,"body":"Mnow test test","conversationId":1005672,"locationId":2045,"contactId":12792806,"assignedUserId":0,"status":"RECEIVED","error":null,"kind":"INCOMING","outgoing":false,"reviewRequest":false,"type":"SMS","readDate":0,"respondedDate":0,"sentDate":1576783232355,"attachments":[]},{"id":4461049,"body":"THIS NUMBER DOES NOT CURRENTLY ACCEPT TEXT MESSAGES PLEASE CALL (716) 444-4444 TO WORK WITH ONE OF OUR INTAKE SPECIALISTS","conversationId":1005672,"locationId":2045,"contactId":12792806,"assignedUserId":0,"status":"RECEIVED","error":null,"kind":"AUTO_RESPONSE","outgoing":true,"reviewRequest":false,"type":"SMS","readDate":0,"respondedDate":0,"sentDate":1576783233546,"attachments":[]},{"id":4620511,"body":"test sms,test sms","conversationId":1005672,"locationId":2045,"contactId":12792806,"assignedUserId":17297,"status":"DELIVERED","error":null,"kind":"API","outgoing":true,"reviewRequest":false,"type":"SMS","readDate":0,"respondedDate":0,"sentDate":1577987093930,"attachments":[]},...

Ответы [ 2 ]

1 голос
/ 04 февраля 2020

Я думаю, что вы хотите сделать:

r=requests.get(url + id, headers=h, params=p)
inbound_dict = {}
inbound=json.loads(r.text)
for item in inbound['messages']:
    inbound_dict[item['id']] = item['body']
print(inbound_dict)

Учитывая эти данные:

'{"id": 1005672, "messages": [{"id": 4461048, "body": "Mnow test test", "conversationId": 1005672, "locationId": 2045, "contactId": 12792806, "assignedUserId": 0, "status": "RECEIVED", "error": "", "kind": "INCOMING", "outgoing": false, "reviewRequest": false, "type": "SMS", "readDate": 0, "respondedDate": 0, "sentDate": 1576783232355, "attachments": []}, {"id": 4461049, "body": "THIS NUMBER DOES NOT CURRENTLY ACCEPT TEXT MESSAGES PLEASE CALL (716) 444-4444 TO WORK WITH ONE OF OUR INTAKE SPECIALISTS", "conversationId": 1005672, "locationId": 2045, "contactId": 12792806, "assignedUserId": 0, "status": "RECEIVED", "error": "", "kind": "AUTO_RESPONSE", "outgoing": true, "reviewRequest": false, "type": "SMS", "readDate": 0, "respondedDate": 0, "sentDate": 1576783233546, "attachments": []}, {"id": 4620511, "body": "test sms,test sms", "conversationId": 1005672, "locationId": 2045, "contactId": 12792806, "assignedUserId": 17297, "status": "DELIVERED", "error": "", "kind": "API", "outgoing": true, "reviewRequest": false, "type": "SMS", "readDate": 0, "respondedDate": 0, "sentDate": 1577987093930, "attachments": []}]}'

Вывод:

{    
    4461048: 'Mnow test test', 
    4461049: 'THIS NUMBER DOES NOT CURRENTLY ACCEPT TEXT MESSAGES PLEASE CALL (716) 444-4444 TO WORK WITH ONE OF OUR INTAKE SPECIALISTS', 
    4620511: 'test sms,test sms'
}
0 голосов
/ 04 февраля 2020

Примерно так может работать:

# initialize variables:
inbound_dictionary_list = []

for item in inbound['messages']:

    # extract key, value:
    key = item['conversationId']
    value = item['body']

    # pack into dictionary object:
    parsed_item = {key:value}

    # update existing dictionary:
    inbound_dictionary_list.append(parsed_item)

Подробности: https://www.w3schools.com/python/ref_dictionary_update.asp

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...