Python.3错误加载具有多个条目的JSON文件

时间:2014-06-19 00:52:24

标签: python json python-3.x

我有一个名为debug.json的JSON文件,我在Python3.3中创建了如下所示:

{"TIME": 55.55, "ID":155,"DATA": [17,22,33,44,55]}{"TIME": 56.55, "ID":195,"DATA": [17,22,ff,44,55]}

我正在尝试使用以下代码加载它:

import json
with open("debug.json",'r',encoding='utf-8') as f:
    testing = json.loads(f.read())

但是,当我尝试这个时,我收到以下错误:

ValueError: Extra data line 1 column 92

这是第二个JSON对象在文本文件中开始的地方......我猜我错过了一些非常简单的东西,但我没有找到任何与我的问题有关的例子。任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:2)

使用json.JSONDecoder.raw_decode,它在末尾接受带有额外数据的JSON,例如另一个JSON对象,并返回一个元组,其中第一个对象被解码,下一个对象的位置。

您的JSON示例:

import json

js = """{"TIME": 55.55, "ID":155,"DATA": [17,22,33,44,55]}{"TIME": 56.55, "ID":195,"DATA": [17,22,ff,44,55]}"""

json.JSONDecoder().raw_decode(js) # ({'TIME': 55.55, 'DATA': [17, 22, 33, 44, 55], 'ID': 155}, 50)

js[50:] # '{"TIME": 56.55, "ID":195,"DATA": [17,22,ff,44,55]}'

如您所见,它成功解码了第一个对象并告诉我们下一个对象的起始位置(在本例中为第50个字符)。

这是我创建的一个函数,它可以解码多个JSON对象并返回包含所有这些对象的列表:

def multipleJSONDecode(js):
    result = []
    while js:
        obj, pos = json.JSONDecoder().raw_decode(js)
        result.append(obj)
        js = js[pos:]
    return result

答案 1 :(得分:0)

创建文件时,请确保每行最多有一个有效的JSON字符串 。然后,当您需要将它们读回时,您可以一次循环一个文件中的行:

import json
testing = []
with open("debug.json",'r',encoding='utf-8') as f:
    for line in f:
        testing.append(json.loads(line))