цикл в json и значение ключа карты python - PullRequest
1 голос
/ 23 декабря 2019

У меня есть сценарий, в котором я перебираю json response и пытаюсь получить сопоставленную пару ключ-значение. цель: перебрать файл json и найти значения с именем content1 внутри объекта labels, если он найден, затем вернуть соответствующее значение name (TEST API1) и id (33332) и сохранить его в переменнойили список для дальнейшего хранения в CSV-файле с именем name и id и content и добавлением sl num.

Вот что я уже пробовал:

get_metadata = requests.get('https://testurl.com')
metadata = get_metadata.json()
for key in metadata:
    value = metadata[i]['labels']
    print('The key and value are ({}) = ({})'.format(key, value))

Здесь возникает ошибка:

Error: `TypeError: the JSON object must be str, bytes or bytearray, 
not list`

Как мне достичь вышеуказанной цели, каким должен быть подход, любая помощь будет великолепной. Если кто-то может помочь здесь, как действовать дальше в этом сценарии.

Ответы [ 2 ]

1 голос
/ 23 декабря 2019

Попробуйте это:

for dict_ in metadata:
    for label in dict_['labels']:
        if label['content'] == 'content1':
           print('The key and value are ({}) = ({})'.format(dict_['id'], 
dict_['name']))

Вывод:

The key and value are (33332) = (TEST API1)

Если вы хотите экспортировать результат как CSV файл, попробуйте это:

import csv

with open('objects.csv', 'w') as csvfile:
    filewriter = csv.writer(
        csvfile, 
        delimiter=',',
        quotechar='|', 
        quoting=csv.QUOTE_MINIMAL
    )
    for dict_ in metadata:
        for label in dict_['labels']:
            if label['content'] == 'content1':
                filewriter.writerow([dict_['id'], dict_['name']])
0 голосов
/ 23 декабря 2019

Можно попробовать

>>> for key in metadata:
...     name = key['name']
...     label_info = key['labels']
...     for x in label_info:
...             print(f"{name}, {x['id']}, {x['content']}")
...
TEST API1, 667, content1
TEST API1, 668, content2
TEST API1, 669, content3
TEST API1, 112, content4
TEST API2, 668, content2
TEST API2, 669, content3
TEST API2, 112, content4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...