Python Can';t解析json文件:json.decoder.jsondeCoderror:额外数据。

Python Can';t解析json文件:json.decoder.jsondeCoderror:额外数据。,python,json,parsing,Python,Json,Parsing,我有一个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 w

我有一个
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)
回溯(最近一次呼叫最后一次):
文件“parser.py”,第5行,在
data=json.load(f)
文件“/usr/lib/python3.6/json/_init__.py”,第299行,已加载
parse_常量=parse_常量,object_pairs_hook=object_pairs_hook,**千瓦)
文件“/usr/lib/python3.6/json/_init__.py”,第354行,加载
返回\u默认\u解码器。解码
文件“/usr/lib/python3.6/json/decoder.py”,第342行,在decode中
raise JSONDecodeError(“额外数据”,s,结束)
json.decoder.JSONDecodeError:额外数据:第6行第1列(字符54)

您能告诉我缺少什么吗?

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

import json
from pprint import pprint

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

    print(data)

您的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数组的信息,可以阅读

您的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。也许你想把它们包装成一个数组?@jwodder谢谢。你能澄清一下我怎样包装它们吗?这是一个巨大的文件。四处走走很好,但只是想澄清一下,你最终得到的是一份口述清单,而不是口述itself@Evan是的,其他任何东西都没有多大意义,因为我需要为dict生成密钥。在我的情况下,我不能仅仅用文本编辑器打开2GB文件来添加一对括号