Перевести json в csv python

Имеется файл json с разной вложенностью и неоднородной структурой:

{
   "item1":
        {"props1": [1, 2, 3, 4, 5, 6],
         "props2": {"key1":"value1", "key2":"value2", "key3":"value3"},
         "props3": "string_value" },
    "item2":
        {"props1": [1, 2, 3, 4, 5, 6],
         "props2": {"key1":"value1", "key2":"value2", "key3":"value3"},
         "props3": "string_value" }
    }

То есть у каждого предмета есть ряд характеристик, которые могут быть словарем, списком или строкой. Мне нужно превратить это в csv подобного вида:

item_name | props1 | props2_key1 | props2_key2 | props2_key3| props3

item1     | list   | value1      | value2      | value3     | string
item1     | list   | value1      | value2      | value3     | string

Есть ли простые варианты сделать это?


Ответы (1 шт):

Автор решения: MaxU

Воспользуйтесь модулем Pandas:

import pandas as pd # pip install pandas | conda install pandas

json_data = {
   "item1":
        {"props1": [1, 2, 3, 4, 5, 6],
         "props2": {"key1":"value1", "key2":"value2", "key3":"value3"},
         "props3": "string_value" },
    "item2":
        {"props1": [1, 2, 3, 4, 5, 6],
         "props2": {"key4":"value4", "key5":"value5", "key6":"value6"},
         "props3": "string_value" }
}

pd.json_normalize(json_data, sep="_").to_csv("/path/to/result.csv", index=False)

PS json_data - должен быть словарем, соответственно если у вас данные хранятся как JSON строка или как JSON файл, то сначала необходимо спарсить JSON в словарь (dict).

пример:

In [118]: print(pd.json_normalize(data, sep="_").to_csv(index=False))

item1_props1,item1_props2_key1,item1_props2_key2,item1_props2_key3,item1_props3,item2_props1,item2_props2_key4,item2_props2_key5,item2_props2_key6,item2_props3
"[1, 2, 3, 4, 5, 6]",value1,value2,value3,string_value,"[1, 2, 3, 4, 5, 6]",value4,value5,value6,string_value
→ Ссылка