我尝试使用json.dump()将单个键:值对从csv文档格式化为JSON。虽然它似乎在很大程度上运行良好,但它将整数转换为字符串(或者可能我需要将字符串转换为整数,这取决于它的查看方式),这是我不想要的,而且我还需要一个键:值对才能成为JSON数组。
目前我的代码基本上是这样的:
import csv
import json
csvfile = open('spreadsheet.csv', 'r')
jsonfile = open('fileTo.json', 'w')
fieldnames = ("Id","name","TypeId","Type", "listHere")
reader = csv.DictReader( csvfile, fieldnames)
for row in reader:
json.dump(row, jsonfile, sort_keys=True, indent=4, separators=(',', ':'))
jsonfile.write(',')
jsonfile.write('\n')
其中,我需要Id和TypeId为整数,listHere为JSON数组。
当前输出是这样的:
[
{
"name":"someName",
"Id":"1",
"Type":"someType",
"TypeId":"2",
"listHere":"someList"
},
]
我需要的是:
[
{
"name":"someName",
"Id":1,
"Type":"someType",
"TypeId":2,
"listHere":
[
"someList"
]
},
]
我通读了文档,但我真的不知道如何使用包含数千个条目的电子表格来完成此操作。任何帮助都将不胜感激。谢谢
发布于 2014-06-03 06:42:48
csv
不支持列类型,尽管那样会更好。
下面的代码(未经测试)对某些字段有一个"fixer“函数。在将每一行转换为JSON之前,一些字段的值将使用fixer函数进行转换。在本例中为int(field)
。
JSON注意:虽然每一行都输出为,但整个列表不是。目前它有一个后缀",“。考虑使用json.iterencode()将数据“流式”传输到JSON文件。
import csv
import json
csvfile = open('spreadsheet.csv', 'r')
jsonfile = open('fileTo.json', 'w')
fieldnames = ("Id","name","TypeId","Type", "listHere")
fieldfixers = {
'Id': int,
'Type': int,
}
reader = csv.DictReader( csvfile, fieldnames)
for row in reader:
for key,value in row.iteritems():
ffunc = fieldfixers.get(key)
if ffunc:
row[key] = ffunc(value)
json.dump(row, jsonfile, sort_keys=True, indent=4, separators=(',', ':'))
jsonfile.write(',')
jsonfile.write('\n')
https://stackoverflow.com/questions/24004297
复制相似问题