将JSON转换为CSV

5 投票
4 回答
6223 浏览
提问于 2025-04-16 05:47

在Python中,我有一个复杂的对象层次结构,这个结构是由列表和字典组成的。我想把这些内容导出到CSV文件或者其他类型的数据库格式。如果有人能提供Python或JavaScript的解决方案,我会非常感激。

我明白,一个CSV文件(或者表格)只能表示我层次结构中的一个“层级”,所以解决方案需要创建多个文件。

这里有一个例子:

{
    "Person" : [{"name":"Greg","age":"35","car":["honda civic","ford focus"]},
                {"name":"Steve","age":"28", "car":["mazda 323", "toyota camry"]}]
}

会变成

Person.csv:
id,name,age
1,Greg,35
2,Steve,28

car.csv:
id,Person_id,value
1,1,honda civic
2,1,ford focus
3,2,mazda 323
4,2,toyota camry

其实这里唯一有趣的就是给新的ID赋值,这样表格中的行就可以关联起来。

谢谢,
戴夫

4 个回答

0

在编程中,有时候我们需要把一些数据从一个地方传到另一个地方。这就像把水从一个杯子倒到另一个杯子一样。这个过程叫做“数据传输”。

有很多方法可以进行数据传输,比如通过网络、文件或者直接在程序内部。每种方法都有自己的优缺点,选择合适的方法可以让我们的程序运行得更顺畅。

在进行数据传输时,我们还需要考虑数据的格式。就像不同的饮料需要不同的杯子一样,数据也需要用合适的格式来存储和传输。常见的数据格式有JSON、XML等,它们就像是数据的“容器”,帮助我们更好地组织和理解数据。

总之,数据传输是编程中一个非常重要的概念,理解它可以帮助我们更好地处理信息,让我们的程序更加高效。

import json
import csv
temp = json.load(open('filename.json','r'))
output =[]
for each in temp:
     row = {}
     row['field1'] =each['field1']
     row['field2'] = each['field2']
     output.append(row)
file = open( "filename_destination.csv", "w")

fileWriter = csv.writer(file , delimiter=",",quotechar='"', quoting=csv.QUOTE_MINIMAL)

Header = ['field1','field2']

fileWriter.writerow(Header)

for x in output:
te = [x['field1'],x['field2']]
fileWriter.writerow(te)
file.close()
0

给每一行分配新的ID,这样表格中的行就可以关联起来。

具体步骤如下:

  1. 为每一行创建一个主键(PK)。

  2. 在“车”和“人”之间建立外键(FK)关系。看起来“车”是依赖于“人”的。

第一步:对你的JSON对象使用enumerate。这样可以为每个人提供一个方便的主键(PK)。

第二步:将每个人的主键(PK)作为你创建的每辆车的外键(FK)。

唯一不太方便的是给车分配主键(PK),因为你的数据结构没有简单的方法可以使用enumerate。为此,你需要用一个老式的计数器。

http://docs.python.org/library/functions.html#enumerate

2

试试这样做。

json_dict = {
    "Person" : [{"name":"Greg","age":"35","car":["honda civic","ford focus"]},
                {"name":"Steve","age":"28", "car":["mazda 323", "toyota camry"]}]
}

for entity in json_dict:
    csv_file = open('%s.csv' % entity, 'wb')
    headers = a[entity][0].keys()
    csv_writer = csv.DictWriter(csv_file, headers)
    map(csv_writer.writerow, json_dict[entity])
    csv_file.close()

# 现在你已经有了要格式化的json到csv文件,你可以使用awk;

awk  -F , '{print NR ", " $2 ", " $3 }' Person.csv > person.csv

...

撰写回答