将csv文件映射为嵌套的json

2024-05-14 01:30:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个csv格式的数据

"category1", 2010, "deatil1"
"category1", 2010, "deatil2"
"category1", 2011, "deatil3"
"category2", 2011, "deatil4"

我需要将它映射到json,格式为

^{pr2}$

基本上,我需要收集所有的细节,每一个独特的类别和年份对,并把名单

我试图使用嵌套dict结构,但输出不正确。在

我已经创建了一个自定义dict类来处理字典的嵌套。下面的代码以正确的结构收集数据,但我不确定如何以正确的格式输出数据。任何帮助都将不胜感激。在

class Vividict(dict):

    def __missing__(self, key):
        value = self[key] = type(self)()
        return value

dict = Vividict()

for row in ws.iter_rows(row_offset=1):
    sector = row[0].value
    year =  row[2].value
    detail = row[1].value
    dict[sector][year][detail]

print json.dumps(dict).encode('utf8')

Tags: csv数据keyselfjsonvalue格式结构
1条回答
网友
1楼 · 发布于 2024-05-14 01:30:48

从您的dict结构开始,就需要构建新的数据结构。我在这里主要使用列表理解来创建dict

import json

rows = [
    ("category1", 2010, "deatil1"),
    ("category1", 2010, "deatil2"),
    ("category1", 2011, "deatil3"),
    ("category2", 2011, "deatil4")]

class Vividict(dict):
    def __missing__(self, key):
        value = self[key] = type(self)()
        return value

dict = Vividict()

for row in rows:
    sector = row[0]
    year = row[1]
    detail = row[2]
    dict[sector][year][detail]

# This is the new data structure, derived from the existing 'dict'
d = {'name': 'Data',
     'children': [
         {'name': k1,  # sector
          'children': [
                       {'name': k2,  # year
                        'children': [
                            {
                             'name': k3  # deatil
                             } for k3 in v2.keys()]
                        } for k2, v2 in v1.iteritems()]
          } for k1, v1 in dict.iteritems()]
     }

print json.dumps(d).encode('utf8')

{a1}在这里}

相关问题 更多 >