无法解析 json 文件:json.decoder.JSONDecodeError:额外数据。

use*_*654 3 python parsing json

我有一个json文件。它的简化版本如下所示:

{
  "host": "a.com",
  "ip": "1.2.2.3",
  "port": 8
}
{
  "host": "b.com",
  "ip": "2.5.0.4",
  "port": 3

}
{
  "host": "c.com",
  "ip": "9.17.6.7",
  "port": 4
}
Run Code Online (Sandbox Code Playgroud)

我运行这个脚本parser.py来解析它:

import json
from pprint import pprint

with open('myfile.json') as f:
    data = json.load(f)
pprint(data)
Run Code Online (Sandbox Code Playgroud)

但我收到此错误:

Traceback (most recent call last):
  File "parser.py", line 5, in <module>
    data = json.load(f)
  File "/usr/lib/python3.6/json/__init__.py", line 299, in load
    parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
  File "/usr/lib/python3.6/json/__init__.py", line 354, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/python3.6/json/decoder.py", line 342, in decode
    raise JSONDecodeError("Extra data", s, end)
json.decoder.JSONDecodeError: Extra data: line 6 column 1 (char 54)
Run Code Online (Sandbox Code Playgroud)

你能指出我缺少什么吗?

Fab*_* N. 16

正如您已经发现的那样:这不是有效的 JSON。
您必须修改它以使其有效,具体来说,您必须将顶级对象包装在一个数组中。尝试这个:

import json
from pprint import pprint

with open('myfile.json') as f:
    data = json.loads("[" + 
        f.read().replace("}\n{", "},\n{") + 
    "]")

    print(data)
Run Code Online (Sandbox Code Playgroud)