Перевод json в csv
Имеется файл json с разной вложенностью и неоднородной структурой:
{
"item1":
{"props1": [1, 2, 3, 4, 5, 6],
"props2": {"key1":"value", "key2":"value", "key3":"value"},
"props3": "string_value" },
"item2":
{"props1": [1, 2, 3, 4, 5, 6],
"props2": {"key1":"value", "key2":"value", "key3":"value"},
"props3": "string_value" },
"item3":
{"props1": [1, 2, 3, 4, 5, 6],
"props2": {"key1":"value", "key2":"value", "key3":"value"},
"props3": "string_value" },
"item4":
{"props1": [1, 2, 3, 4, 5, 6],
"props2": {"key1":"value", "key2":"value", "key3":"value"},
"props3": "string_value" },
"item5":
{"props1": [1, 2, 3, 4, 5, 6],
"props2": {"key1":"value", "key2":"value", "key3":"value"},
"props3": "string_value" }
}
То есть у каждого предмета есть ряд характеристик, которые могут быть словарем, списком или строкой. Ключи внутри массивов предметов одинаковы.
Мне нужно превратить это в csv подобного вида(в первом столбце название предмета, в шапке ключи):
item_name | props1 | props2_key1 | props2_key2 | props2_key3| props3
item1 | list | value | value | value | string
item2 | list | value | value | value | string
item3 | list | value | value | value | string
item4 | list | value | value | value | string
item5 | list | value | value | value | string
Есть ли простые варианты сделать это?
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
import pandas as pd
res = (pd
.concat([pd.json_normalize(data[key], sep="_").assign(item_name=key)
for key in data.keys()],
ignore_index=True)
.sort_index(axis=1))
res.to_csv("/path/to/result.csv", index=False)
промежуточный результат (DataFrame):
In [144]: res
Out[144]:
item_name props1 props2_key1 props2_key2 props2_key3 props3
0 item1 [1, 2, 3, 4, 5, 6] value value value string_value
1 item2 [1, 2, 3, 4, 5, 6] value value value string_value
2 item3 [1, 2, 3, 4, 5, 6] value value value string_value
3 item4 [1, 2, 3, 4, 5, 6] value value value string_value
4 item5 [1, 2, 3, 4, 5, 6] value value value string_value