Как правильно распарсить json
Не могу разобраться как этот json распарсить в массив..
response = requests.get(config.PRIVAT_ECHANGE).text
data = json.loads(response)
[
{
"ccy":"RUR",
"base_ccy":"UAH",
"buy":"0.28000",
"sale":"0.32000"
},
{
"ccy":"EUR",
"base_ccy":"UAH",
"buy":"19.20000",
"sale":"20.00000"
},
{
"ccy":"USD",
"base_ccy":"UAH",
"buy":"15.50000",
"sale":"15.85000"
}
]
пытаюсь записать его в массив
exchanges = []
for item in data:
exchanges += item
но получаеться
['ccy', 'base_ccy', 'buy', 'sale', 'ccy', 'base_ccy', 'buy', 'sale', 'ccy', 'base_ccy', 'buy', 'sale']
а я хочу чтобы в идеале при вызове было так
exchanges[0][ccy] + " " +
exchanges[0][base_ccy] + " " +
exchanges[0][buy] + " " +
exchanges[0][sale]
Это будет код за один курс валют..
Ответы (2 шт):
В вашем решении ошибка. Во-первых, при попытке итерировать в цикле dict, то итерируются ключи, а не значения.
Во-вторых, Вам следовало этот кусочек с конкатенацией вставить как раз в цикле, итерируете список.
Приведу более изящное решение с генератором списков.
d = [
{
"ccy":"RUR",
"base_ccy":"UAH",
"buy":"0.28000",
"sale":"0.32000"
},
{
"ccy":"EUR",
"base_ccy":"UAH",
"buy":"19.20000",
"sale":"20.00000"
},
{
"ccy":"USD",
"base_ccy":"UAH",
"buy":"15.50000",
"sale":"15.85000"
}
]
# с помощью генератора списков формируем список со строками
# с использование f-строк
o = [f'{r["ccy"]} {r["base_ccy"]} {r["buy"]} {r["sale"]}' for r in d]
Вывод:
['RUR UAH 0.28000 0.32000', 'EUR UAH 19.20000 20.00000', 'USD UAH 15.50000 15.85000']
Если нужно, чтобы каждая строка была разделена в списке, то вот вариант:
o2 = [(r["ccy"], r["base_ccy"], r["buy"], r["sale"]) for r in d]
Вывод следующий:
[('RUR', 'UAH', '0.28000', '0.32000'), ('EUR', 'UAH', '19.20000', '20.00000'), ('USD', 'UAH', '15.50000', '15.85000')]
Теперь список содержит кортежи (массивы), где лежат по отдельности значения на каждую строку
Ну начнем с того, что это не json, это список словарей. Если вы хотите получить таблицу, то лучше использовать Pandas.
import pandas as pd
data = [
{
"ccy":"RUR",
"base_ccy":"UAH",
"buy":"0.28000",
"sale":"0.32000"
},
{
"ccy":"EUR",
"base_ccy":"UAH",
"buy":"19.20000",
"sale":"20.00000"
},
{
"ccy":"USD",
"base_ccy":"UAH",
"buy":"15.50000",
"sale":"15.85000"
}
]
df = pd.DataFrame(data)
print(df)
ccy base_ccy buy sale
0 RUR UAH 0.28000 0.32000
1 EUR UAH 19.20000 20.00000
2 USD UAH 15.50000 15.85000
Элементы извлекаются просто:
print(df['sale'])
print(df['buy'][1])
0 0.32000
1 20.00000
2 15.85000
Name: sale, dtype: object
19.20000