如何将包含数组数据的csv文件转换为json文件?

2024-06-02 09:07:59 发布

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

我有一个CSV文件,里面有很多列。 有一些列是相同的,但是我想将它们转换成一个JSON对象,它们都位于同一个数组下。在

例如在CSV中:

firstname,lastname,pet,pet,pet
Joe, Dimaggio, dog, cat
Pete, Rose, turtle, cat
Jackie, Robinson, dog

我希望JSON是

^{pr2}$

我正试图编写一个简单的Python脚本来实现这一点,但是遇到了一些问题。在

到目前为止,我得到的是:

import csv
import json

csvfile = open('userdata.csv', 'r')
jsonfile = open('userdata.json', 'w')

fieldnames = ("firstname", "lastname", "pet", "pet", "pet");
reader = csv.DictReader( csvfile, fieldnames)
record = {}
for row in reader:
    record['firstname'] = row['firstname']
    record['lastname'] = row['lastname']
    record['pets'] = json.JSONEncoder().encode({"pets": [row['pet'], row['pet'], row['pet'], row['pet'], row['pet']]});
    json.dump(record, jsonfile, indent=4)
    ##json.dump(json.loads(json.JSONEncoder(record)), jsonfile, indent=4)
print "something worked"

但这很有趣,因为它将pets打印为一个名为pets的对象内的数组。在

我不知道如何在object`pets之外获取数组pets。它还向数组项添加反斜杠

{
    "firstname": "Joe",
    "lastname": "Dimaggio", 
    "pets": "{\"pets\": [\"dog\", \"cat\"]}"
}

Tags: csv对象json数组firstnamerecordcatrow
1条回答
网友
1楼 · 发布于 2024-06-02 09:07:59

这是因为您先对它进行编码,然后使用json.dumps对其进行两次编码。删除json.JSONEncoder().encode(...),它应该可以正常工作。在

import csv
import json

csvfile = open('userdata.csv', 'r')
jsonfile = open('userdata.json', 'w')

fieldnames = ("firstname", "lastname", "pet", "pet", "pet");
reader = csv.DictReader( csvfile, fieldnames)
record = {}
for row in reader:
    record['firstname'] = row['firstname']
    record['lastname'] = row['lastname']
    record['pets'] = [[row['pet'], row['pet'], row['pet'], row['pet'], row['pet']]
    # Remove blank entries
    record['pets'] = [x for x in record['pets'] if x is not '']
    json.dumps(record, jsonfile, indent=4)
print "something worked"

您看到的反斜杠是转义json字符串的结果,这是将其序列化两次的结果。在

相关问题 更多 >