Python json.load JSONDecodeError:尝试加载多个 json 字典时出现额外数据错误
Posted
技术标签:
【中文标题】Python json.load JSONDecodeError:尝试加载多个 json 字典时出现额外数据错误【英文标题】:Python json.load JSONDecodeError: Extra data error when trying load multiple json dictionaries 【发布时间】:2021-08-26 15:44:42 【问题描述】:所以我必须以如下所示的相同格式导入一个 json 文件:
"name": "bob"
"name": "sarah"
这是我试图用来打开它的函数:
def read_json_file(file):
with open(file, "r") as r:
response = json.load(r)
return response
我在尝试加载时收到此错误:
json.decoder.JSONDecodeError:额外数据:第 4 行第 1 列(字符 22)
由于文件很大,我无法修复 json 数据。我需要一种解决方法来解析每个字典。
问这个问题的时候我已经试过了:
Python json.loads shows ValueError: Extra data
我尝试更改我的函数以匹配最佳答案:
response = json.dumps(r)
然而这导致了这个错误:
TypeError:TextIOWrapper 类型的对象不是 JSON 可序列化的
对此的任何帮助将不胜感激。
【问题讨论】:
您给出的示例不是有效的 JSON @DarkKnight 我知道,但这是我收到的格式,文件太大无法更正,所以我需要解决方法 【参考方案1】:为了解决那种“多重”/“无效”的JSON,你可以读取整个文件,添加这些括号[]
来封装字符串,然后用json.loads()
将其加载为字符串。
-
以字符串形式读取整个文件,将其存储到变量中。
删除所有出现的换行符和空格。
在交集处添加逗号
,
,这样就变成了...,...
。
用括号[]
封装。
使用json.loads()
解析JSON字符串。
完整代码:
def read_json_file(file):
with open(file, "r") as r:
response = r.read()
response = response.replace('\n', '')
response = response.replace('', ',')
response = "[" + response + "]"
return json.loads(response)
【讨论】:
这是我插入此函数时遇到的错误json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 2 column 1 (char 3)
对不起,我没有看清楚每个括号都放在一行中。已编辑我的答案
我不确定替换所有空格是个好主意。考虑 'name': 'John Smith'
行得通!我删除了替换空格,因为这不是我要查找的输出,但该函数的其余部分有效
@DarkKnight 感谢您的建议。我已经编辑了我的答案。【参考方案2】:
您可以使用JSONDecoder.raw_decode 以增量方式使用输入。这是一个基于source of decode()的示例:
def json_decode_many(s):
import json
import json.decoder
decoder = json.JSONDecoder()
_w = json.decoder.WHITESPACE.match
idx = 0
while True:
idx = _w(s, idx).end() # skip leading whitespace
if idx >= len(s):
break
obj, idx = decoder.raw_decode(s, idx=idx)
yield obj
然后用法看起来像
>>> input_string = """
"name": "bob"
"name": "sarah"
"""
>>> for x in json_decode_many(input_string):
... print("Decoded:", x)
...
Decoded: 'name': 'bob'
Decoded: 'name': 'sarah'
【讨论】:
以上是关于Python json.load JSONDecodeError:尝试加载多个 json 字典时出现额外数据错误的主要内容,如果未能解决你的问题,请参考以下文章
Python JSON dump ,load,dumps,loads
python中json.dumps()和json.dump() 以及 json.loads()和json.load()的区分
python中json文件处理涉及的四个函数json.dumps()和json.loads()json.dump()和json.load()的区分
Python json.load JSONDecodeError:尝试加载多个 json 字典时出现额外数据错误
Python中json文件处理的四个函数json.dumps()json.loads()json.dump()和json.load()的区分