【问题标题】:raise JSONDecodeError("Extra data", s, end) with json.dump用 json.dump 引发 JSONDecodeError("Extra data", s, end)
【发布时间】:2019-04-05 03:55:09
【问题描述】:

我需要做一个包含许多 json 的 json 文件,例如:{}{}{}。

我实际上可以创建文件,但是当我尝试读取它时,我得到了这个错误:

raise JSONDecodeError("Extra data", s, end)
JSONDecodeError: Extra data

有什么帮助吗?

# Create dictionaries

texto = ['a','b','c','d','e']
keys = ['id','klass','text']
datos = []
for i in range(0,5):
    values = [str(i), str(0), texto[i]]
    dictio = dict(zip(keys, values))
    datos.append(dictio)

# Create the json
for my_dict in datos:
    with open("test.json", 'a') as fp: 
        json.dump(my_dict,fp)

# Read the json:
data = []
with open("test.json") as f: 
    for line in f:
        data.append(json.loads(line))

我希望有一个格式为 {}{}{} 的 .json 文件并在 python 中读取此文件。现在我有了这种格式的文件,但是当我尝试读取它时出现错误

JSONDecodeError("Extra data", s, end)

【问题讨论】:

    标签: python json python-3.x


    【解决方案1】:

    json.dump 不输出尾随换行符,因此在将多个 JSON 字符串转储到同一文件的循环之后,同一行中有多个 JSON 对象,当您读取该行并像使用 @987654322 一样解析它时@它会抱怨在第一个 JSON 对象结束后有额外的数据。

    要修复它,您可以在每次调用 json.dump 后写入一个换行符。此外,无需每次迭代都打开文件。您可以在循环之前打开文件:

    with open("test.json", 'w') as fp: 
        for my_dict in datos:
            json.dump(my_dict,fp)
            fp.write('\n')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-04
      • 2023-01-02
      • 2016-09-18
      • 2021-09-29
      • 2019-08-06
      • 2021-11-23
      • 1970-01-01
      相关资源
      最近更新 更多