我有这个简单的子数据结构:
{
"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来逐步执行代码,原因是异常对我来说并不清楚.
在JSON的布尔文字都是小写true和false,但你是使用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)