解码JSON文件 - 期待EOF

时间:2017-03-13 09:14:39

标签: python json python-2.7

我有一个要解析的JSON输入。示例如下所示:

{"source":123456,"target":1211251,"distance":1.2115,"type":1}
{"source":223456,"target":1214251,"distance":1.1115,"type":1}

使用以下代码抛出错误:

import json
with open('Data/test.json') as data_file:
    data = json.load(data_file)

错误

raise ValueError(errmsg("Extra data", s, end, len(s)))
ValueError: Extra data: line 2 column 1 - line 2 column 62 (char 62 - 123)

如果只给出1行样本,代码会设法解析,如果在JSON输入中给出超过1行,则抛出错误。

我使用JSONLint检查,并指出以下错误

Error: Parse error on line 6:
....2115,   "type": 1} {    "source": 223456,
---------------------^
Expecting 'EOF', '}', ',', ']', got '{'

有人能给我一个提示来解决这个错误吗?

3 个答案:

答案 0 :(得分:1)

你的文件是很多json,而不是一个json,所以你可以为每一行解析它们。

示例代码:

import json
with open('Data/test.json') as data_file:
   for line in data_file:
       data = json.loads(line)
       print(data)

答案 1 :(得分:1)

JSON字符串可能只包含一个,比方说,“第一级”对象。该对象本身可能包含某些内容,如果它是一个字典或列表。但是你要解析的不是有效的JSON。也许你想把你的两个词组放在一个列表中

[
  {"source":123456,"target":1211251,"distance":1.2115,"type":1},
  {"source":223456,"target":1214251,"distance":1.1115,"type":1}
]

答案 2 :(得分:0)

如果您的来源输入是

{"source":123456,"target":1211251,"distance":1.2115,"type":1}
{"source":223456,"target":1214251,"distance":1.1115,"type":1}

那么这是无效的JSON。你根本不能让两个对象不属于数组或其他字典。因此,您的源数据需要首先修复代码而不是代码。