JSON 解码字符串 - 未终止的字符串

新手上路,请多包涵

我有一个 2 GB 的 json 文件,当我尝试加载它时出现此错误:

json.decoder.JSONDecodeError:未终止的字符串开始于:第 1 行第 1093156512 列(字符 1093156511)

所以这意味着可能有一些 转义序列,对吗?(或类似的东西..)弄乱了 json 正确吗?问题是这个文件很大,只是在编辑器中打开它是一个巨大的痛苦。在我看到问题所在之前,编辑器 100% 崩溃了。但是,我仍然需要以某种方式解决这个问题……我不确定是什么导致了这个问题……可能有很多原因。

我的数据本质上是一个对象列表,如下所示:

 data = [{key1: 123, key2:"this is the first string to concatenate"},
 {key1: 131, key2:"this is the second string to concatenate"},
 {key1: 152, key2:"this is the third string to concatenate"} ]

除了更复杂的 key2 之外。如果问题是 \ ,如果我摆脱了 json 文件中的所有 \ ,它会起作用吗?但是,没有什么可以说奇怪的转义字符是我的问题….另外,我对我的输入 json 文件是什么几乎没有控制,所以我认为我无论如何都无法改变它。

有没有办法在不更改输入 json 文件的情况下解决这个问题?

[编辑] 这是整个错误跟踪:

data = json.load(json_file,strict=False) 中的文件“halp.py”,第 38 行

文件“/usr/lib/python3.6/json/init.py”,第 299 行,加载 parse_constant =parse_constant, object_pairs_hook=object_pairs_hook, **kw)

文件“/usr/lib/python3.6/json/ init .py”,第 367 行,加载返回 cls(**kw).decode(s)

文件“/usr/lib/python3.6/json/decoder.py”,第 339 行,在 decode obj 中,end = self.raw_decode(s, idx=_w(s, 0).end())

文件“/usr/lib/python3.6/json/decoder.py”,第 355 行,在 raw_decode obj 中,end = self.scan_once(s, idx) json.decoder.JSONDecodeError: Unterminated string starting at: line 1 column 1093156512 (字符 1093156511)

当我在那里寻找时,我得到:

 eers in the fridge!"}, {"city_name": "Portland", "comments": "A cute space to rest your head in Portland. We just stayed for one night, briefly met Adam who was lovely! Appreciated the beers and coffe

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

阅读 2.5k
1 个回答

我发现 Luminoso 的好人写了一个库来解决这类问题。

显然, 有时您可能不得不处理来自其他代码的文本。文本经常通过几个不同的软件,每个都有自己的怪癖,可能在链中的某个地方有 Microsoft Office。

这就是 ftfy 来救援的地方。

 from ftfy import fix_text
import json
# text = some text source with a potential unicode problem
fixed_text = fix_text(text)
data = json.loads(fixed_text)

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

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