Ошибка декодера JSON при использовании модуля Python JSON - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть такая простая структура данных сына:

{
  "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
    }
  ]
}

Который я пытаюсь разобрать, используя следующий код:

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))))

при выполнении кода я получаю следующую ошибку:

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)

Может кто-нибудь помочь мне диагностировать этот сбой. Я попытался использовать паб для пошагового выполнения кода, и причина в том, что исключение мне не ясно.

1 Ответ

0 голосов
/ 05 ноября 2018

Логические литералы в JSON строчные true и false, но вы используете прописные литералы Python:

...
"isAlive": True,
...

Вместо этого используйте правильное написание строчных букв:

...
"isAlive": true,
...

Существует также запятая в одном из ваших объектов:

...
"users": {
  "admin": 15,
  "storage": 10,
},
....

JSON не допускает запятые, вы должны удалить его:

...
"users": {
  "admin": 15,
  "storage": 10
},
....

Ваш полный 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
    }
  ]
}

Это можно загрузить без ошибок:

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}]}
...