使用python json模块的JSON解码器错误

dcr*_*rer 0 python json sdn

我有这个简单的子数据结构:

{
  "hostname": "CORESW01",
  "vendor": "Cisco",
  "isAlive": True,
  "uptime": 123456,
  "users": {
    "admin": 15,
    "storage": 10,
  },
  "vlans": [
    {
      "vlan_name": "VLAN30",
      "vlan_id": 30
    },
    {
      "vlan_name": "VLAN20",
      "vlan_id": 20
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用以下代码进行解析:

import json

with open("json-example.json") as f:
    data = f.read()
json_dict = json.loads(data)

print("Now printing each item in this document and the type it contains")



for k, v in json_dict.items():
    print("-- The key {0} contains a {1} value.".format(str(k), str(type(v))))
Run Code Online (Sandbox Code Playgroud)

当代码执行时,我收到以下错误:

Traceback (most recent call last):
  File "example-json.py", line 11, in <module>
    json_dict = json.loads(data)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/json/__init__.py", line 348, in loads
    return _default_decoder.decode(s)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/json/decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 4 column 14 (char 62)
Run Code Online (Sandbox Code Playgroud)

有人可以帮助我诊断这个失败.我尝试使用pub来逐步执行代码,原因是异常对我来说并不清楚.

Mis*_*agi 5

在JSON的布尔文字都是小写truefalse,但你是使用Python大写文字:

...
"isAlive": True,
...
Run Code Online (Sandbox Code Playgroud)

请使用正确的小写拼写:

...
"isAlive": true,
...
Run Code Online (Sandbox Code Playgroud)

您的一个对象中还有一个尾随逗号:

...
"users": {
  "admin": 15,
  "storage": 10,
},
....
Run Code Online (Sandbox Code Playgroud)

JSON不允许使用尾随逗号,您必须将其删除:

...
"users": {
  "admin": 15,
  "storage": 10
},
....
Run Code Online (Sandbox Code Playgroud)

您的完整JSON应如下所示:

{
  "hostname": "CORESW01",
  "vendor": "Cisco",
  "isAlive": true,
  "uptime": 123456,
  "users": {
    "admin": 15,
    "storage": 10
  },
  "vlans": [
    {
      "vlan_name": "VLAN30",
      "vlan_id": 30
    },
    {
      "vlan_name": "VLAN20",
      "vlan_id": 20
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

这可以加载而不会出错:

json.loads('''{
  "hostname": "CORESW01",
  "vendor": "Cisco",
  "isAlive": true,
  "uptime": 123456,
  "users": {
    "admin": 15,
    "storage": 10
  },
  "vlans": [
    {
      "vlan_name": "VLAN30",
      "vlan_id": 30
    },
    {
      "vlan_name": "VLAN20",
      "vlan_id": 20
    }
  ]
}''')
# {'hostname': 'CORESW01', 'vendor': 'Cisco', 'isAlive': True, 'uptime': 123456, 'users': {'admin': 15, 'storage': 10}, 'vlans': [{'vlan_name': 'VLAN30', 'vlan_id': 30}, {'vlan_name': 'VLAN20', 'vlan_id': 20}]}
Run Code Online (Sandbox Code Playgroud)