Как бороться с пустым значением JSON - PullRequest
0 голосов
/ 22 мая 2018

Я новичок в Python и пытаюсь открыть файл json, который выглядит следующим образом:

{
  "empty_char":"",
  "empty_number": ,
  "char":"i'm a char",
  "number":0
}

Допустим, это файл test.json:

При попытке открыть его в python я использую:

import json

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

и возникает следующая ошибка:

Traceback (most recent call last):
  File "<input>", line 2, in <module>
  File "C:\ProgramData\Anaconda3\Lib\json\__init__.py", line 299, in load
    parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
  File "C:\ProgramData\Anaconda3\Lib\json\__init__.py", line 354, in loads
    return _default_decoder.decode(s)
  File "C:\ProgramData\Anaconda3\Lib\json\decoder.py", line 339, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\ProgramData\Anaconda3\Lib\json\decoder.py", line 357, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 3 column 19 (char 39)

Выдает ошибку из-за "empty_number": ,

Как мне справиться с этой ошибкой, если я не могу изменить мой .json файл?

1 Ответ

0 голосов
/ 22 мая 2018

Вы можете использовать более гибкий yaml для считывания значений, не указанных как None.

import yaml
from io import StringIO

mystr = StringIO("""{
  "empty_char":"",
  "empty_number": ,
  "char":"i'm a char",
  "number":0
}""")

# replace mystr with open('test.json', 'r')
with mystr as stream:
    res = yaml.load(stream)

print(res, type(res))

{'empty_char': '', 'empty_number': None, 'char': "i'm a char", 'number': 0}
<class 'dict'>

Примечание io.StringIO позволяет намчитать из строки, как если бы это был файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...