Я делаю простую программу-обертку вокруг программного обеспечения, и эта оболочка будет, помимо прочего, анализировать конфигурационный файл JSON, который будет кодироваться пользователем как способ для пользователя укажите определенные настройки для программы.Неожиданное поведение, проявляемое модулем JSON Python
В рамках программы, у меня есть следующие строки кода:
with open(os.path.join(args.config_bin_dir, 'basic_config.json'), 'r') as jsondata :
print "JSON File contents:", jsondata.read()
basic_config.update(json.load(jsondata))
print "The basic_config after updating with JSON:", basic_config
jsondata.close()
basic_config объект является словарем объект, который получает построен где-то на вершине раньше в программе, и здесь я хочу добавьте новые пары ключ-значение слова, полученные при разборе файла конфигурации пользователя JSON в объекте-словаре basic_config.
Когда программа запускается, я получаю следующее сообщение об ошибке, часть которого выглядит следующим образом:
File "path/to/python/script.py", line 42, in main
basic_config.update(json.load(jsondata))
File "/usr/lib/python2.7/json/__init__.py", line 290, in load
**kw)
File "/usr/lib/python2.7/json/__init__.py", line 338, in loads
return _default_decoder.decode(s)
File "/usr/lib/python2.7/json/decoder.py", line 366, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python2.7/json/decoder.py", line 384, in raw_decode
raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
Я очень озадачен этой ошибки, но я заметил, что он уходит, пока Я удалить строку print "JSON File contents:", jsondata.read()
и запустить код либо как:
with open(os.path.join(args.config_bin_dir, 'basic_config.json'), 'r') as jsondata :
# print "JSON File contents:", jsondata.read()
basic_config.update(json.load(jsondata))
print "The basic_config after updating with JSON:", basic_config
jsondata.close()
или
with open(os.path.join(args.config_bin_dir, 'basic_config.json'), 'r') as jsondata :
# print "JSON File contents:", jsondata.read()
basic_config.update(json.load(jsondata))
# print "The basic_config after updating with JSON:", basic_config
jsondata.close()
Я все еще получаю ту же ошибку, если я закомментировать строку после json.load
метода:
with open(os.path.join(args.config_bin_dir, 'basic_config.json'), 'r') as jsondata :
print "JSON File contents:", jsondata.read()
basic_config.update(json.load(jsondata))
# print "The basic_config after updating with JSON:", basic_config
jsondata.close()
Так что я предполагаю, что он должен делать с вызовом read
метода объекта JSON файла перед разбором, что тот же файл. Может ли кто-нибудь объяснить мне, почему это так, и ошибаюсь ли я в причине ошибки?
спасибо!