如何将 JSON 转换为 CSV?

新手上路,请多包涵

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

原文由 little_fish 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 489
1 个回答

使用 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)

原文由 vmg 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题