读取具有多个字典的JSON文件

时间:2019-07-18 12:19:15

标签: json python-3.x tweepy

我创建了一个JSON文件,其中包含我流式传输的推文。该文件有多个词典,即每个推文一个。当我尝试读取此文件时

json.decoder.JSONDecodeError: Extra data: line 2 column 1 (char 3419)

此位置是新记录/推文/字典的开始位置。 我该如何解决这个问题?我尝试查找类似的答案,但它们与我的问题无关。 如何读取此文件?我是否以错误的方式存储它?

这是JSON文件:

{"created_at": "Thu Jul 18 12:06:44 +0000 2019", "id": 1151825627051257856, "id_str": "1151825627051257856", "text": "@godhoonbey @cuttingedge2019 Unparalleled greed for power to loot on display in Karnataka in history of India. Did\u2026 ", "display_text_range": [29, 140], "source": "<a href=\"" rel=\"nofollow\">Twitter for Android</a>", "truncated": true, "in_reply_to_status_id": 1151797702419787778, "in_reply_to_status_id_str": "1151797702419787778", "in_reply_to_user_id": 840249609368797186,
.
.
.
.
"lang": "en", "timestamp_ms": "1563451604031"
}
{
    # another tweet content
}

1 个答案:

答案 0 :(得分:2)

因此,您的文件不是完全有效的JSON。

您需要用[]包裹起来,使其成为一个大列表,并在每个文档后添加逗号(以将它们分开)。

如果(且仅当)每个文档都位于其自己的一行中(我认为是因为错误位于line 2 column 1上),您可以使用json.loads逐行对其进行解析,例如这个:

import json


def parse_data(filename):
    for l in open(filename, 'r'):
        yield json.loads(l)


data = list(parse_data(filename))

但是,您真的应该像我最初建议的那样将其包装在一个大列表中,从而使其成为有效的JSON。