如何将JSON转换为CSV? [英] How can I convert JSON to CSV?
问题描述
我有一个JSON文件,我想转换为CSV文件。
我试过:
import json
import csv
f = open('data.json')
data = json.load(f)
f.close()
f = open('data.csv')
csv_file = csv.writer(f)
数据中的项:
f.writerow(item)
f。 close()
但是,它没有工作。我使用Django,我收到的错误是:
文件'对象没有属性'writerow'
所以,我试了下面的:
code> import json
import csv
f = open('data.json')
data = json.load(f)
f.close )
f = open('data.csv')
csv_file = csv.writer(f)
数据项:
csv_file.writerow b
$ b f.close()
然后我得到错误:
顺序预期
示例json文件:
[
{
pk :22,
model:auth.permission,
fields:{
codename:add_logentry,
name:条目,
content_type:8
}
},
{
pk:23,
model:auth.permission ,
fields:{
codename:change_logentry,
name:可以更改日志条目,
content_type:8
}
},
{
pk:24,
model:auth.permission,
fields:{
codename:delete_logentry,
name:可以删除日志条目,
content_type:8
}
},
{
pk:4,
model:auth.permission,
fields:{
codename:add_group,
name :可以添加组,
content_type:2
}
},
{
pk:10,
model auth.permission,
fields:{
codename:add_message,
name:可以添加消息,
content_type:4
}
}
]
我不知道这个问题是否已经解决已经或不,但让我粘贴我已经做了参考。
首先,你的JSON有嵌套对象,因此通常不能直接转换为CSV。
您需要将其更改为如下所示:
{
pk:22,
model:auth.permission,
codename:add_logentry,
content_type:8,
name:可以添加日志条目
},
...]
生成CSV:
import csv
import json
x =
{
pk:22,
model:auth.permission,
fields:{
codename:add_logentry
name:可以添加日志条目,
content_type:8
}
},
{
pk
model:auth.permission,
fields:{
codename:change_logentry,
name:可以更改日志条目
content_type:8
}
},
{
pk:24,
model:auth.permission b $ bfields:{
codename:delete_logentry,
name:可以删除日志条目,
content_type:8
}
}
]
x = json.loads(x)
f = csv.writer(open(test.csv,wb + ))
#编写CSV头,如果你不需要,删除这行
f.writerow([pk,model,codename,name content_type])
for x in x:
f.writerow([x [pk],
x [model],
x [字段] [codename],
x [fields] [name],
x [fields] [content_type]])
您将获得输出:
pk,model,codename,name,content_type
22,auth.permission,add_logentry,可以添加日志条目,8
23,auth.permission,change_logentry, 8
24,auth.permission,delete_logentry,可以删除日志条目,8
I have a JSON file that I want to covert to a CSV file. How can I do this with Python?
I tried:
import json import csv f = open('data.json') data = json.load(f) f.close() f = open('data.csv') csv_file = csv.writer(f) for item in data: f.writerow(item) f.close()
However, it did not work. I am using Django and the error I received is:
file' object has no attribute 'writerow'
So, then I tried the following:
import json import csv f = open('data.json') data = json.load(f) f.close() f = open('data.csv') csv_file = csv.writer(f) for item in data: csv_file.writerow(item) f.close()
I then get the error:
sequence expected
Sample json file:
[ { "pk": 22, "model": "auth.permission", "fields": { "codename": "add_logentry", "name": "Can add log entry", "content_type": 8 } }, { "pk": 23, "model": "auth.permission", "fields": { "codename": "change_logentry", "name": "Can change log entry", "content_type": 8 } }, { "pk": 24, "model": "auth.permission", "fields": { "codename": "delete_logentry", "name": "Can delete log entry", "content_type": 8 } }, { "pk": 4, "model": "auth.permission", "fields": { "codename": "add_group", "name": "Can add group", "content_type": 2 } }, { "pk": 10, "model": "auth.permission", "fields": { "codename": "add_message", "name": "Can add message", "content_type": 4 } } ]
解决方案I am not sure this question is solved already or not, but let me paste what I have done for reference.
First, your JSON has nested objects, so it normally cannot be directly converted to CSV. You need to change that to something like this:
{ "pk": 22, "model": "auth.permission", "codename": "add_logentry", "content_type": 8, "name": "Can add log entry" }, ......]
Here is my code to generate CSV from that:
import csv import json x = """[ { "pk": 22, "model": "auth.permission", "fields": { "codename": "add_logentry", "name": "Can add log entry", "content_type": 8 } }, { "pk": 23, "model": "auth.permission", "fields": { "codename": "change_logentry", "name": "Can change log entry", "content_type": 8 } }, { "pk": 24, "model": "auth.permission", "fields": { "codename": "delete_logentry", "name": "Can delete log entry", "content_type": 8 } } ]""" x = json.loads(x) f = csv.writer(open("test.csv", "wb+")) # Write CSV Header, If you dont need that, remove this line f.writerow(["pk", "model", "codename", "name", "content_type"]) for x in x: f.writerow([x["pk"], x["model"], x["fields"]["codename"], x["fields"]["name"], x["fields"]["content_type"]])
You will get output as:
pk,model,codename,name,content_type 22,auth.permission,add_logentry,Can add log entry,8 23,auth.permission,change_logentry,Can change log entry,8 24,auth.permission,delete_logentry,Can delete log entry,8
这篇关于如何将JSON转换为CSV?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!