Python-如何将JSON转换为CSV?

发布于 2021-02-02 23:22:23

我有一个要转换为CSV文件的JSON文件。如何使用Python执行此操作?

我试过了:

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()

但是,它没有用。我正在使用Django,收到的错误是:

file' object has no attribute 'writerow'

然后,我尝试了以下方法:

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)  # ← changed

f.close()

然后我得到错误:

sequence expected

样本json文件:

[{
        "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
        }
    }
]
关注者
0
被浏览
101
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    首先,你的JSON具有嵌套对象,因此通常无法直接将其转换为CSV。你需要将其更改为以下内容:

    {
        "pk": 22,
        "model": "auth.permission",
        "codename": "add_logentry",
        "content_type": 8,
        "name": "Can add log entry"
    },
    ......]
    

    这是从中生成CSV的代码:

    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"]])
    

    你将获得以下输出:

    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
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看