Python — синтаксический анализ данных JSON

#python #json

#python #json

Вопрос:

Я новичок в Python, поэтому простите меня, если это ошибка новичка. Я пытаюсь проанализировать определенные данные из вывода JSON.

Вот пример вывода:

     "data": [
    {
        "trackedEmails": [
            {
                "attachments": true,
                "fromEnv": {
                    "emailAddress": "user@test.com"
                },
                "fromHdr": {
                    "displayableName": "Joe Johnson",
                    "emailAddress": "user@test.com"
                },
                "id": "eNpFj11PwjAUhv9Lb2VJ243puGNGREIGgh",
                "info": "Indexed and archived",
                "received": "2020-10-23T16:19:00 0000",
                "route": "outbound",
                "senderIP": "10.10.10.10",
                "sent": "2020-10-23T16:19:00 0000",
                "status": "archived",
                "subject": "FW: Sent to Alias",
                "to": [
                    {
                        "displayableName": "",
                        "emailAddress": "external@test.com"
                    }
                ]
            },
  

Вот как я пытаюсь проанализировать данные. Это не полный сценарий, поскольку часть информации конфиденциальна.

 payload = {
    'data': [
        {
            'start': '2020-10-23T00:00:00 0000',
            'end': '2020-11-10T00:00:00 0000',
            'advancedTrackAndTraceOptions': {
                'from': '@example.com',
            }
        }
    ]
}


r = requests.post(url=url, headers=headers, data=str(payload))
data_r = r.json()


tracked_emails = []
for x in data_r:
  tracked_emails.append([x['info'], x['senderIP']])
  

Каждый раз, когда я пытаюсь это сделать, я получаю «TypeError: строковые индексы должны быть целыми числами». Я просто хотел бы извлечь определенную информацию и экспортировать ее в CSV. (Эту часть я понял). Я пробовал json.dumps и json.loads без какого-либо успеха. Я также попытался добавить целое число, например: [x[‘info’][0], x[‘senderIP’]] .

Любая помощь приветствуется. Спасибо!

Комментарии:

1. Ошибка сообщает вам, что вы пытаетесь получить доступ к индексу строки, но вы используете строку в качестве индекса вместо числа. Убедитесь, что x является типом словаря, а не строкой. Возможно, вам потребуется использовать json.loads() данные для их преобразования.

2. Итерация по dict дает вам его ключи, следовательно x , являясь строкой. Вы, вероятно, хотите data_r = r.json()['data'] .