当前位置: 首页 > 面试题库 >

Python-如何将JSON转换为CSV?

裘光启
2023-03-14
问题内容

我有一个要转换为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
        }
    }
]

问题答案:

首先,你的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


 类似资料:
  • 问题内容: 以下是我的json文件输入 码 输出量 因此,在这里我确实得到了答案,但是没有打印一次,而是打印了7次。如何解决此问题。 问题答案: 是一个字典,您不需要对其进行迭代。您可以使用键直接访问值。 例如:

  • 问题内容: 我对编程非常陌生,过去3/4星期一直在学习python,这是给出的作业之一。 输入项 输出量 我一直在尝试代码为: 此代码的输出如下: 谁可以帮我这个事? 问题答案: 处理完整行后转储。

  • 问题内容: 我正在App Engine上进行一些工作,我需要将从远程服务器检索到的XML文档转换为等效的JSON对象。 我用来解析由返回的XML数据。我还尝试使用将已解析的XML文档转换为JSON。我对如何将两者钩在一起完全不知所措。以下是我要修改的代码: 问题答案: Soviut对于lxml objectify的建议是好的。使用特殊子类化的simplejson,您可以将lxml对象化结果转换为j

  • 问题内容: 如何将JSON字符串简单地转换为C#,最好不使用第三方解析器? 问题答案: 我不确定为什么每个人仍然推荐JSON.NET来反序列化JSON。我写了一篇有关如何将JSON反序列化为C#的博客文章。 简而言之,它是这样的: 确保添加对System.Web.Extensions.dll的引用。 注意: 我通常反序列化为,所以我假设这会起作用。但是,我还没有验证它是否确实如此。

  • 问题内容: 我想从Web服务中检索JSON,然后进行解析。 我走对了吗? 不幸的是,我不知道如何转换为JSONObject。 这是我的JSON(摘录): 问题答案: 您可以将字符串转换为json:

  • 我在MongoDB中使用Java驱动程序3.0,以便通过Web服务发送JSON。 当我想将文档对象(org.bson.文档)转换为JSON时,我使用,当我想将JSON转换为文档对象时,我使用。 但是,当我处理文档列表时(如JSON中所示: