Python:解析连接的 JSON

我有一个巨大的文件(几 GB 大小)。它有一个连接的 json,即几个 JSON 背靠背没有分隔符(甚至没有逗号或换行符)。

有谁知道我可以以某种方式解析这个?当连接中的第二个 json 到达时,json.load(fileobj) 和 json.loads(line) 都失败并出现“额外数据”错误。

如果解决方案由于尺寸巨大而允许字符流传输,那就更好了,但这不是必需的。

编辑:连接的 json 是https://en.wikipedia.org/wiki/JSON_streaming#Concatenated_JSON_2


慕工程0101907
浏览 200回答 2
2回答

繁花如伊

逐字符读取文件,将结果写入文件。还要跟踪大括号缩进级别。每当您读取一个}使缩进级别为零的字符时,您就读取了整个 json 对象。关闭文件,用 加载它json.load(),然后开始一个新文件。但是,如果文件包含引号或转义}字符,则此解决方案过于幼稚且行不通;你需要一个“真正的”解析器。

LEATH

另一个答案建议跟踪缩进。这很难(尽管不如 XML 差)。一个更简单的解决方案是意识到当它因“额外数据”而失败时,JSONDecodeError异常包含一个pos字段,该字段说明额外数据的开始位置。额外的数据是您的第二条信息。因此,您想重新解析之前的子字符串pos。递归解决方案来展示这个想法:def parseConcatenatedJSON(s:str):     try:         json.loads(s)     except json.JSONDecodeError as jde:         head = s[0:jde.pos]         json.loads(head)         tail = s[jde.pos:]         parseConcatenatedJSON(tail)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python