python json.loads 未终止的字符串错误

标签 python json sqlite

我一直在关注聊天机器人教程,但卡住了。如果您对我的代码是什么样子感到好奇(我很沮丧,所以我逐字复制了他的代码),我在这篇文章的底部包含了我正在进行的确切步骤作为链接。

在我的代码执行期间,它在抛出异常之前处理了 26,000 多行代码。我的代码可以在下面找到。如您所见,我尝试了各种解决方案,包括将/r 和/n 字符替换为空字符,并添加标签 strict=False 这应该允许未终止的字符串进入 json,但这也不起作用.

with open('C:/Python34/stuff/chatbot/{}/RC_{}'.format(timeframe.split('-')[0], timeframe), buffering=1000) as f:
    for row in f:
        row_counter += 1

        if row_counter > start_row:
            try:
                row = json.loads(row.replace('\n','').replace('\r',''), strict=False)

            ---------blah blah blah blah------------ 

            except Exception as e:
                print("RUH ROH " + str(e))

准确的错误信息如下:

RUH ROH 未终止的字符串开始于:第 1 行第 368 列(字符 367)

链接: https://pythonprogramming.net/building-database-chatbot-deep-learning-python-tensorflow/

编辑:

摆脱 try catch 在抛出错误时为我提供了更多信息,可以在下面找到:

Traceback (most recent call last):
  File "C:/Python34/stuff/chatbot/chatbot_db2.py", line 103, in <module>
row = json.loads(row.replace('\n','').replace('\r',''), strict=False)
  File "C:\Python34\lib\json\__init__.py", line 331, in loads
return cls(**kw).decode(s)
  File "C:\Python34\lib\json\decoder.py", line 343, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Python34\lib\json\decoder.py", line 359, in raw_decode
obj, end = self.scan_once(s, idx)
ValueError: Unterminated string starting at: line 1 column 368 (char 367)

编辑 2:

在评论之后,他们建议我打印出引发异常的行。它确实说明了一些问题。

{"subreddit":"sydney","author_flair_text":null,"id":"cqugtij","gilded":0,"removal_reason":null,"downs":0,"archived":false,"created_utc":"1430439358","link_id":"t3_34e5fd","ups":6,"subreddit_id":"t5_2qkob","name":"t1_cqugtij","score_hidden":false,"author_flair_css_class":null,"parent_id":"t1_cqttsc3","controversiality":0,"score":6,"author":"SilverMeteor9798","body":"作为州交通部长,Gladys 的几乎所有新闻稿都包含了内容关于自由主义者是如何“继续工作”并指责工党的。这不一定是错误的,只是过了一段时间后变得令人厌烦了

成功的一行看起来像这样:

{"created_utc":"1430438400","ups":4,"subreddit_id":"t5_378oi","link_id":"t3_34di91","name":"t1_cqug90g","score_hidden":false "author_flair_css_class":null,"author_flair_text":null,"subreddit":"soccer_jp","id":"cqug90g","re​​moval_reason":null,"gilded":0,"downs":0,"archived":false,"author":"rx109","score":4,"retrieved_on":1432703079,"body":"\u304f\u305d\n\u8aad\u307f\u305f\u3044\u304c\u8cb7\u3063\u305f\u3089\u8ca0\u3051\u306a\u6c17\u304c\u3059\u308b\n\u56f3\u66f8\u9928\u306b\u51fa\u306d\u30fc\u304b\u306a","杰出":null,"编辑":false, “争议”:0,“parent_id”:“t3_34di91”

老实说,我现在更困惑了,但它看起来确实以所有对象的 " 结尾。所以要么它没有结束,要么有一个字符不能被解析?

EDIT3 - 已解决

我假设文件是​​完整的,但我猜是下载它时出错,文件被截断,最后一个条目是不完整的 JSON 对象。所以只需删除该条目即可解决问题。

感谢大家的帮助

最佳答案

正如我在 EDIT2 中解释的那样,我打印出了给我带来麻烦的行,发现它没有以 结尾,而每个 JSON 对象都应该以 结尾。然后我进入文件,通过简单的搜索检查了给我带来麻烦的确切行,我发现该行不仅被截断了,而且它也是我文件的最后一行。

当我下载或解压这个文件时肯定有错误,而且它似乎被缩短了。这反过来引发了我在没有似乎有效的解决方案的情况下遇到的错误。

对于遇到此错误且 .replace() 解决方案不起作用的任何人:尝试查看您的数据并确保确实存在可替换或编辑的内容。就我而言,在下载或提取过程中出现截断错误,这使得此类解决方案变得不可能。

非常感谢 abarnert、Michael Robellard 和 Anton Kachurin

关于python json.loads 未终止的字符串错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49284203/

相关文章:

jquery - Ajax/JQuery/JSON 表单

php - 尝试使用 PHP 处理 SQLite 时,WAMP 中 SQLite 数据库文件的位置?

java - Android 测验应用程序,用户通过 Web 表单创建测验内容

python - GAE Python - 如何对邮件正文中的特殊字符进行编码?

c# - 如何将 JToken 转换为嵌套的 float 列表?

java - 如何从 JSON 对象数组创建目录结构

objective-c - 如何在保留斯堪的纳维亚字母的同时一直为 SQLite 正确编码 NSString

python - 旧Python代码的更新

Python Twilio 与客户端进行调用

python - 如何使用groupby对象获取其他列的总和?