#python #json #api
#python #json #API
Вопрос:
Я пытаюсь извлечь данные с помощью API и Python, а затем сохранить их в файле Json.
К сожалению, API возвращает очень плохо структурированные данные, поэтому я не могу выполнить программный поиск в файле.
Тогда данные выглядят примерно так:
{
"data": [
[
[],
null
],
[
[
{
"1. symbol": "YI",
"2. name": "111 Inc.",
"3. type": "Equity",
"4. region": "United States",
"5. marketOpen": "09:30",
"6. marketClose": "16:00",
"7. timezone": "UTC-05",
"8. currency": "USD",
"9. matchScore": "0.3636"
}
],
null
],
[
[
{
"1. symbol": "2GB.DEX",
"2. name": "2G Energy AG",
"3. type": "Equity",
"4. region": "XETRA",
"5. marketOpen": "08:00",
"6. marketClose": "20:00",
"7. timezone": "UTC 02",
"8. currency": "EUR",
"9. matchScore": "0.5714"
},
{
"1. symbol": "2GL.FRK",
"2. name": "Gaming and Leisure Properties Inc.",
"3. type": "Equity",
"4. region": "Frankfurt",
"5. marketOpen": "08:00",
"6. marketClose": "20:00",
"7. timezone": "UTC 02",
"8. currency": "EUR",
"9. matchScore": "0.5714"
}
],
null
]
]
}
Мне удается отфильтровать None до его сохранения, но скобки остаются и разрушают структуру.
Кто-нибудь знает, как я могу хорошо структурировать эти данные? Я использую Python 3.8
Комментарии:
1. Что вы считаете «хорошо структурированным»? Что вы пытались сделать, чтобы получить данные для желаемого вывода?
Ответ №1:
Ваша структура json идеальна, просто используйте json
библиотеку для правильной обработки данных:
import json
data = """{
"data": [
[
[],
null
],
[
[
{
"1. symbol": "YI",
"2. name": "111 Inc.",
"3. type": "Equity",
"4. region": "United States",
"5. marketOpen": "09:30",
"6. marketClose": "16:00",
"7. timezone": "UTC-05",
"8. currency": "USD",
"9. matchScore": "0.3636"
}
],
null
],
[
[
{
"1. symbol": "2GB.DEX",
"2. name": "2G Energy AG",
"3. type": "Equity",
"4. region": "XETRA",
"5. marketOpen": "08:00",
"6. marketClose": "20:00",
"7. timezone": "UTC 02",
"8. currency": "EUR",
"9. matchScore": "0.5714"
},
{
"1. symbol": "2GL.FRK",
"2. name": "Gaming and Leisure Properties Inc.",
"3. type": "Equity",
"4. region": "Frankfurt",
"5. marketOpen": "08:00",
"6. marketClose": "20:00",
"7. timezone": "UTC 02",
"8. currency": "EUR",
"9. matchScore": "0.5714"
}
],
null
]
]
}"""
data_json = json.loads(data)
Вывод
{'data': [[[], None],
[[{'1. symbol': 'YI',
'2. name': '111 Inc.',
'3. type': 'Equity',
'4. region': 'United States',
'5. marketOpen': '09:30',
'6. marketClose': '16:00',
'7. timezone': 'UTC-05',
'8. currency': 'USD',
'9. matchScore': '0.3636'}],
None],
[[{'1. symbol': '2GB.DEX',
'2. name': '2G Energy AG',
'3. type': 'Equity',
'4. region': 'XETRA',
'5. marketOpen': '08:00',
'6. marketClose': '20:00',
'7. timezone': 'UTC 02',
'8. currency': 'EUR',
'9. matchScore': '0.5714'},
{'1. symbol': '2GL.FRK',
'2. name': 'Gaming and Leisure Properties Inc.',
'3. type': 'Equity',
'4. region': 'Frankfurt',
'5. marketOpen': '08:00',
'6. marketClose': '20:00',
'7. timezone': 'UTC 02',
'8. currency': 'EUR',
'9. matchScore': '0.5714'}],
None]]}
Ответ №2:
Что ж, здесь определенно есть шаблон. В основном, структура данных выглядит следующим образом:
{
"data":[
[[<values you look for>], null],
[[<values you look for>], null]
]
}
Из вопросов неясно, что должно быть там, где null
находится, поэтому я проигнорирую эту часть.
Чтобы извлечь остальное, это сделает работу:
flat_data = []
for data in response['data']:
flat_data = data[0]
Вы получите плоский список dicts.
Комментарии:
1. Я не знаю, почему существует это значение null, это была моя проблема. И я не видел шаблона, так что спасибо, сэр 🙂