首页 > 解决方案 > 将多个 Twitter JSON 文件转换为一个 CSV

问题描述

我使用 Twitter API 抓取了大量 Twitter 数据。现在我将 JSON 文件存储在我的计算机上,我想将它们(大约 1000 个文件)组合成一个 csv 文件以进行进一步处理。

每个 JSON 文件如下所示:

200
{
    "data": [
        {
            "author_id": "34571035",
            "created_at": "2019-12-29T20:02:19.000Z",
            "id": "1211376921407369216",
            "text": "RT @ConnectedCarMag: Free online magazine for connected, autonomous and electric car professionals. Sign up 4 Connected Car mag #ConnectedC\u2026"
        },
        {
            "author_id": "5946022",
            "created_at": "2019-12-29T19:04:28.000Z",
            "id": "1211362363351261184",
            "text": "..."
        }, 
            ...

我尝试了很多不同的代码来将 JSON 文件转换为单个 csv,但是当我尝试使用任何给定的代码时,我得到了以下任一错误代码:

JSONDecodeError:额外数据:第 2 行第 1 列(字符 4) JSONDecodeError:期望用双引号括起来的属性名称:第 2 行第 1 列(字符 2)ValueError:尾随数据

当我使用 pandas 将文件转换为 csv 时,我在使用 pd.read_json() 时已经遇到了问题。即使我尝试设置 lines=True,我什至无法在 Python 中将 JSON 文件作为 Dataframe 输入。

我对 Python 和整体编程非常陌生,因此非常感谢任何帮助。

标签: pythonjsoncsvtwitter

解决方案


您的 json 无效,200不应在开头。我会修改正在编写该部分的脚本。如果您愿意,您可以在 pandaspd.read_json(<json_variable_name>['data'])中进行操作,但最简单的方法是使用以下函数:

import json
import csv
from typing import Dict, List, Union

# standard function I use for reading json files
def read_json(path: str) -> Union[Dict, List]:
    with open(path, 'r') as file:
        return json.load(file)

# standard function I use for writing list of dicts to csv
def write_csv(data: List[Dict], path: str) -> None:
    with open(path, 'w') as file:
        fields = set().union(*data)
        writer = csv.DictWriter(file, fieldnames=fields, lineterminator='\n')
        writer.writeheader()
        writer.writerows(data)

json_data = read_json('your_file.json')

# write the json data (dictionary) to a csv
write_csv(json_data['data'], 'data.csv')

注意使用json_data['data']部分['data']访问"data"json 响应的键值


推荐阅读