如何将JSON转换为CSV? [英] How can I convert JSON to CSV?

查看:249
本文介绍了如何将JSON转换为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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆