首页 > 解决方案 > Python json.load JSONDecodeError:尝试加载多个 json 字典时出现额外数据错误

问题描述

所以我必须以如下所示的相同格式导入一个 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 显示 ValueError: Extra data

我尝试更改我的功能以匹配最佳答案:

    response = json.dumps(r)

然而,这带来了这个错误:

TypeError:TextIOWrapper 类型的对象不是 JSON 可序列化的

任何帮助将不胜感激。

标签: pythonjsonjsondecoder

解决方案


为了解决那种“多个”/“无效”JSON,您可以读取整个文件,添加这些括号[]来封装字符串,然后将其加载为带有json.loads().

  1. 将整个文件读取为字符串,将其存储到变量中。
  2. 删除所有出现的换行符和空格。
  3. 添加逗号,的交点}{,这样就可以了...},{...
  4. 用括号将其封装起来[]
  5. 用于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)

推荐阅读