删除格式不正确的Python的JSON对象

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (37)

我正在建立一个聊天机器人数据库atm。我使用来自pushshift.io的数据。为了处理大数据文件,(我明白json将所有内容加载到RAM中,所以如果你只有16GB内存并使用30GB数据,这是一个nono),我写了一个bash脚本,将大文件拆分成较小的块3GB的文件,以便我可以通过json.loads(或pd.read_json)运行它。每当我运行我的代码它返回时的问题

JSONDecodeError: Expecting value: line 1 column 1 (char 0)

因此,我看一下temp刚刚创建的json文件,我看到这发生在我的JSON文件中:

ink_id":"t3_2qyr1a","body":"Most of us have some family members like this. *Most* of my family is like this. ","downs":0,"created_utc":"1420070400","score":14,"author":"YoungModern","distinguished":null,"id":"cnas8zv","archived":false,"parent_id":"t3_2qyr1a","subreddit":"exmormon","author_flair_css_class":null,"author_flair_text":null,"gilded":0,"retrieved_on":1425124282,"ups":14,"controversiality":0,"subreddit_id":"t5_2r0gj","edited":false}

数据的样本校正看起来像这样

{"score_hidden":false,"name":"t1_cnas8zv","link_id":"t3_2qyr1a","body":"Most of us have some family members like this. *Most* of my family is like this. ","downs":0,"created_utc":"1420070400","score":14,"author":"YoungModern","distinguished":null,"id":"cnas8zv","archived":false,"parent_id":"t3_2qyr1a","subreddit":"exmormon","author_flair_css_class":null,"author_flair_text":null,"gilded":0,"retrieved_on":1425124282,"ups":14,"controversiality":0,"subreddit_id":"t5_2r0gj","edited":false}

我注意到我的bash脚本拆分文件时没有注意JSON对象。所以我的问题是有没有办法在python中编写一个函数,可以检测未正确格式化并删除它的JSON对象?

提问于
用户回答回答于

如果您使用的是json标准库json.loads则会返回调用格式错误的数据JSONDecodeError。您可以将代码放在try-catch语句中,并检查是否发生此异常以确保只处理格式正确的数据。

用户回答回答于

没有太多的信息可以继续,但我会挑战框架。

Python中有几种增量json解析器。快速搜索显示ijson应允许您遍历非常大的数据结构而不会爆炸。

您还应该考虑使用其他数据格式(或真实数据库),或者您很容易发现自己花时间重新实现了使用正确工具已经存在的更慢版本的功能。

扫码关注云+社区

领取腾讯云代金券