如何将JSON转换为CSV?

17 浏览
0 Comments

如何将JSON转换为CSV?

我有一个JSON文件,我想将其转换为CSV文件。我该如何用Python实现这个功能?\n我尝试了以下代码:\n

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

\n然而,它没有起作用。我正在使用Django,我收到的错误是:\n`file\' object has no attribute \'writerow\'`\n然后,我尝试了以下代码:\n

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

\n然后我得到了错误:\n`sequence expected`\n样本JSON文件:\n[{\n \"pk\": 22,\n \"model\": \"auth.permission\",\n \"fields\": {\n \"codename\": \"add_logentry\",\n \"name\": \"Can add log entry\",\n \"content_type\": 8\n }\n }, {\n \"pk\": 23,\n \"model\": \"auth.permission\",\n \"fields\": {\n \"codename\": \"change_logentry\",\n \"name\": \"Can change log entry\",\n \"content_type\": 8\n }\n }, {\n \"pk\": 24,\n \"model\": \"auth.permission\",\n \"fields\": {\n \"codename\": \"delete_logentry\",\n \"name\": \"Can delete log entry\",\n \"content_type\": 8\n }\n }, {\n \"pk\": 4,\n \"model\": \"auth.permission\",\n \"fields\": {\n \"codename\": \"add_group\",\n \"name\": \"Can add group\",\n \"content_type\": 2\n }\n }, {\n \"pk\": 10,\n \"model\": \"auth.permission\",\n \"fields\": {\n \"codename\": \"add_message\",\n \"name\": \"Can add message\",\n \"content_type\": 4\n }\n }\n]\n

0
0 Comments

如何将JSON转换为CSV?

问题的出现原因:

需要将JSON文件转换为CSV文件,以便于进行数据分析和处理。

解决方法:

首先,我们需要一个函数来将JSON对象展平为字典。代码如下:

def flattenjson(b, delim):
    val = {}
    for i in b.keys():
        if isinstance(b[i], dict):
            get = flattenjson(b[i], delim)
            for j in get.keys():
                val[i + delim + j] = get[j]
        else:
            val[i] = b[i]
    return val

然后,我们可以将这个函数应用于JSON对象的每个字典,并找到相关的列名。代码如下:

input = map(lambda x: flattenjson(x, "__"), input)
columns = [x for row in input for x in row.keys()]
columns = list(set(columns))

最后,我们可以使用csv模块将结果写入CSV文件。代码如下:

import csv
with open(fname, 'wb') as out_file:
    csv_w = csv.writer(out_file)
    csv_w.writerow(columns)
    for i_r in input:
        csv_w.writerow(map(lambda x: i_r.get(x, ""), columns))

通过以上步骤,我们可以将JSON文件成功转换为CSV文件,方便后续的数据处理和分析。

0
0 Comments

如何将JSON转换为CSV?

首先,你的JSON中有嵌套对象,所以通常不能直接转换为CSV。你需要将其改为类似以下内容的格式:

{

"pk": 22,

"model": "auth.permission",

"codename": "add_logentry",

"content_type": 8,

"name": "Can add log entry"

},

......

以下是我用于从JSON生成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+"))
# 写入CSV头部,如果不需要,可以删除这一行
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

如果使用Python3,请参考这个链接:stackoverflow.com/questions/7200606

对于Python3,请将打开CSV文件的那一行改为f = csv.writer(open("test.csv", "w", newline=''))

TypeError: a bytes-like object is required, not 'str'是关于Python3中的编码类型错误。尝试使用f.writer(open('test.csv', 'w', encoding='utf8'))

0
0 Comments

如何将JSON转换为CSV?

通过使用pandas库,这非常简单,只需使用两个命令!

df = pd.read_json()

read_json将JSON字符串转换为pandas对象(系列或数据帧)。然后:

df.to_csv()

可以返回一个字符串或直接写入csv文件。有关to_csv的详细信息,请参阅文档。

基于以前答案的冗长性,我们都应该感谢pandas提供的快捷方式。

对于非结构化的JSON,请参考此答案。

编辑:

有人要求提供一个有效的最小示例:

import pandas as pd

with open('jsonfile.json', encoding='utf-8') as inputfile:

df = pd.read_json(inputfile)

df.to_csv('csvfile.csv', encoding='utf-8', index=False)

这也可以作为最小的一行代码完成:curl url | python -c 'import sys,pandas as pd;pd.read_json(sys.stdin).to_csv(sys.stdout)'

0