Python将嵌套的JSON转换为CSV

时间:2018-05-17 15:08:49

标签: python json python-3.x csv

我正在尝试将JSON文件转换为CSV格式如下:

我正在使用json和csv模块,我当前的解决方案读取json文件,吐出唯一的标题(a,b,c,d,...) 将插槽与标题匹配 但是还没有写csv。

我的主要问题是尝试转换类似的内容: 库存,A,B,... slot1 a,b,... 如果实体包含它,则为0和1值

还涉及很多for循环,我不确定这是最佳实践: 嵌套for循环以获取所有标头, 循环遍历json文件, 编写csv文件

tl; dr问题是: 将“库存项目”列表从每个插槽的JSON转换为CSV中的0和1 我也希望它可以用于增加库存(可能是e,f,g,h,......)超过4个插槽等 所以我试图避免任何硬编码的行和列

第一次使用stackoverflow,谢谢!

equip_inventory.json

Window

预期输出CSV

Window {
    id: myWindow
    //...
    MouseArea {
        anchors.fill: parent
        onClicked: WindowGrabber.grab(myWindow, path) //singleton type
    }
}

2 个答案:

答案 0 :(得分:1)

如果您习惯使用第三方库,可以使用pandas.get_dummies

import pandas as pd

d = {"slot1": ["a", "b"],
     "slot2": ["c", "d"],
     "slot3": ["a", "b", "c"],
     "slot4": ["d"]}

df = pd.DataFrame([[d[i]] for i in d], index=d.keys())

dummies = pd.get_dummies(df[0].apply(pd.Series).stack()).sum(level=0)

df = df.join(dummies)\
       .drop(0, axis=1)\
       .rename_axis('inventory')\
       .reset_index()

df.to_csv('file.csv', index=False)

结果:

print(df)

  inventory  a  b  c  d
0     slot1  1  1  0  0
1     slot2  0  0  1  1
2     slot3  1  1  1  0
3     slot4  0  0  0  1

答案 1 :(得分:1)

我们可以在没有熊猫的情况下这样做

import json
import csv

with open('output.csv', 'w') as csvfile, open('sample.json') as jsonfile:
    data = json.load(jsonfile)
    for key, value in data.items():
            writer = csv.writer(csvfile, delimiter=',')
            writer.writerow([
            key,
            1 if 'a' in value else 0,
            1 if 'b' in value else 0,
            1 if 'c' in value else 0,
            1 if 'd' in value else 0]
            )