Создание фрейма данных из вложенных выходных данных JSON API

#python #json #pandas #dataframe

#python #json #pandas #фрейм данных

Вопрос:

Я использую Qualtrics API для извлечения некоторых данных для работы. Результаты, которые я получал, возвращаются в формате JSON, и я хотел бы преобразовать данные в фрейм данных. Я работаю в записной книжке jupyter в Alteryx. Я планирую экспортировать фрейм данных в Alteryx для выполнения работы в другом месте .. все, что мне нужно сделать, это привести его в форму. Я получаю тот же ответ, что и в примере, который я опубликовал ниже с веб-сайта Qualtrics. Кто-нибудь знает, как я могу взять поля в разделе вложенных «элементов» и создать фрейм данных? Я хотел бы создать фрейм данных из полей контактов, которые я получаю обратно.

Я попробовал следующее:

 jdata = json.loads(response.text)
df = pd.DataFrame(jdata)
print(df)
 

Но я получаю фрейм данных всего ответа json.

Пример ответа:

 {
"meta": {
    "httpStatus": "200 - OK",
    "requestId": "7de14d38-f5ed-49d0-9ff0-773e12b896b8"
},
"result": {
    "elements": [
        {
            "contactId": "CID_123456",
            "email": "js@example.com",
            "extRef": "1234567",
            "firstName": "James",
            "language": "en",
            "lastName": "Smith",
            "phone": "8005552000",
            "unsubscribed": false
        },
        {
            "contactId": "CID_3456789",
            "email": "person@example.com",
            "extRef": "12345678",
            "firstName": "John",
            "language": "en",
            "lastName": "Smith",
            "phone": "8005551212",
            "unsubscribed": true
        }
    ],
    "nextPage": null
}
 

}

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

1. Вам нужно будет выбрать $.result поле из исходного JSON-файла resonse, если вам нужны вложенные данные

Ответ №1:

попробуйте

 jdata = json.loads(response.text)
elements= jdata['result']['elements']
df = pd.DataFrame(elements)
print(df)
 

Ответ №2:

 jdata = json.loads(response.text)
df = pd.json_normalize(jdata, record_path=['result', 'elements'])
 

Фактически, если jdata это список dict, этот метод также доступен.