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

新手上路,请多包涵

我有一个 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
}

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

 import json
from pprint import pprint

with open('myfile.json') as f:
    data = json.load(f)
pprint(data)

但我收到此错误:

 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)

你能指出我遗漏了什么吗?

原文由 user9371654 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

您的 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
    }
]

在 JSON 中,你不能有多个顶级对象,但你可以有对象数组并且它是有效的

如果需要,您可以在此链接中查看更多 JSON 数据集示例

原文由 M4HdYaR 发布,翻译遵循 CC BY-SA 4.0 许可协议

正如您已经发现的:那不是有效的 JSON。

您必须对其进行修改以使其有效,具体来说,您必须将顶级对象包装在一个数组中。尝试这个:

 import json
from pprint import pprint

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

    print(data)

原文由 Fabian N. 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题