Python 从平面csv创建嵌套JSON

Python 从平面csv创建嵌套JSON,python,json,csv,nested,flat,Python,Json,Csv,Nested,Flat,尝试根据以下示例从csv创建4深嵌套JSON: Region,Company,Department,Expense,Cost Gondwanaland,Bobs Bits,Operations,nuts,332 Gondwanaland,Bobs Bits,Operations,bolts,254 Gondwanaland,Maureens Melons,Operations,nuts,123 在每一个级别,我都要计算成本的总和,并将其包含在相关级别输出的JSON中 输出的JSON的结构应该如

尝试根据以下示例从csv创建4深嵌套JSON:

Region,Company,Department,Expense,Cost
Gondwanaland,Bobs Bits,Operations,nuts,332
Gondwanaland,Bobs Bits,Operations,bolts,254
Gondwanaland,Maureens Melons,Operations,nuts,123
在每一个级别,我都要计算成本的总和,并将其包含在相关级别输出的JSON中

输出的JSON的结构应该如下所示:

    {
          "id": "aUniqueIdentifier", 
          "name": "usually a nodes name", 
          "data": [
                {
                      "key": "some key", 
                      "value": "some value"
                }, 
                {
                      "key": "some other key", 
                      "value": "some other value"
                }
          ], 
          "children": [/* other nodes or empty */ ]
    }
>>> summary = []
>>> for region, company, department, expense, cost in rows[1:]:
    summary.setdefault(*region, company, department), []).append((expense, cost))
(参考号:)

按照python中递归函数的思路思考,但到目前为止,这种方法还没有太大的成功。。。非常感谢您对快速简便解决方案的任何建议

更新: 逐渐放弃了成本汇总的想法,因为我就是搞不懂:(.我还不是一个python程序员)!只要能够生成格式化的JSON就足够了,如果有必要,我可以在以后插入这些数字

我一直在阅读、谷歌搜索和阅读一个解决方案,在路上我学到了很多东西,但仍然没有成功地从上面的CSV结构创建我的嵌套JSON文件。一定是网络上某个地方的简单解决方案?也许其他人在搜索词方面运气更好???

这里有一些提示

使用csv.reader将输入解析为列表列表:

循环浏览列表,建立字典并总结成本。根据您要创建的结构,组合可能如下所示:

    {
          "id": "aUniqueIdentifier", 
          "name": "usually a nodes name", 
          "data": [
                {
                      "key": "some key", 
                      "value": "some value"
                }, 
                {
                      "key": "some other key", 
                      "value": "some other value"
                }
          ], 
          "children": [/* other nodes or empty */ ]
    }
>>> summary = []
>>> for region, company, department, expense, cost in rows[1:]:
    summary.setdefault(*region, company, department), []).append((expense, cost))
使用json.dump写出结果:

希望下面的递归函数能帮助您开始。它根据输入构建一棵树。请注意您希望休假的类型,我们将其标记为“成本”。您需要详细说明构建您想要的确切结构的功能:

import csv, itertools, json

def cluster(rows):
    result = []
    for key, group in itertools.groupby(rows, key=lambda r: r[0]):
        group_rows = [row[1:] for row in group]
        if len(group_rows[0]) == 2:
            result.append({key: dict(group_rows)})
        else:
            result.append({key: cluster(group_rows)})
    return result

if __name__ == '__main__':
    s = '''\
Gondwanaland,Bobs Bits,Operations,nuts,332
Gondwanaland,Bobs Bits,Operations,bolts,254
Gondwanaland,Maureens Melons,Operations,nuts,123
'''
    rows = list(csv.reader(s.splitlines()))
    r = cluster(rows)
    print json.dumps(r, indent=4)

如果这是家庭作业,请给它贴上这样的标签。不,这是一个新手对政府预算数据可视化的实验。。。尝试将15000条记录放入一个带有随需应变节点的漂亮树状图(thejit.org)。一整天都在谷歌上搜索和试验,运气不好。。。有很多相似的东西,但对我来说都不管用。这很公平。我可以向您展示如何将行分组写入嵌套数据结构,但我不清楚示例输入中的字段如何映射到目标结构。您能给出您所展示的示例输入所期望的确切json输出吗?谢谢您的提示!第一次体验js和python。在解决这个问题之前,我还有一些学习要做,它只显示:
{“冈瓦纳大陆”:[{“Bobs位”:[{“操作”:[“坚果”]}],“莫林瓜”:[{“操作”:[“nuts”]}]}
第二行“冈瓦纳大陆,Bobs位,操作,螺栓,254”未显示。另外,如何将最后一列添加为值(nuts:332)?您能帮忙吗?修复了最后一级分组。感谢您注意到这个问题。