在python中将.csv格式化为json,用于单个键:值对

时间:2014-06-02 22:28:09

标签: python json csv

我正在尝试格式化单个键:从csv文档到JSON的值对以及使用json.dump()。虽然它似乎在大多数情况下运行良好,但它将我的整数转换为字符串(或者我需要将我的字符串转换成整数,取决于它看起来的方式),这是我不想要的,我也需要一键:值对成为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"
        ]       
    },
]

我仔细阅读了文档,但实际上并没有看到如何使用包含数千个条目的电子表格来完成此操作。任何帮助将不胜感激。感谢

1 个答案:

答案 0 :(得分:2)

csv不支持列类型,但这样会很好。

以下代码(未经测试)有一个" fixer"某些领域的功能。在每行被翻译成JSON之前,有些字段是'使用修复函数转换值。在这种情况下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')