将JSON转换为CSV
在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 个回答
在编程中,有时候我们需要把一些数据从一个地方传到另一个地方。这就像把水从一个杯子倒到另一个杯子一样。这个过程叫做“数据传输”。
有很多方法可以进行数据传输,比如通过网络、文件或者直接在程序内部。每种方法都有自己的优缺点,选择合适的方法可以让我们的程序运行得更顺畅。
在进行数据传输时,我们还需要考虑数据的格式。就像不同的饮料需要不同的杯子一样,数据也需要用合适的格式来存储和传输。常见的数据格式有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()
给每一行分配新的ID,这样表格中的行就可以关联起来。
具体步骤如下:
为每一行创建一个主键(PK)。
在“车”和“人”之间建立外键(FK)关系。看起来“车”是依赖于“人”的。
第一步:对你的JSON对象使用enumerate
。这样可以为每个人提供一个方便的主键(PK)。
第二步:将每个人的主键(PK)作为你创建的每辆车的外键(FK)。
唯一不太方便的是给车分配主键(PK),因为你的数据结构没有简单的方法可以使用enumerate
。为此,你需要用一个老式的计数器。
试试这样做。
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
...