Форум сайта python.su
0
Всем доброго времени суток!
Есть проблемка - для удобства использования нужно в файл и из файла записывать и считывать словарь. Выбрал json. И вот когда считывается такое, например содержимое, то все нормально:
{'id': 0, 'df': 78}
{u'df': 65, u'id': 5}
Traceback (most recent call last): File "C:\Users\VMR\Desktop\library\Library.py", line 215, in <module> app = MyApp() File "C:\Python27\lib\site-packages\wx-3.0-msw\wx\_core.py", line 8631, in __init__ self._BootstrapApp() File "C:\Python27\lib\site-packages\wx-3.0-msw\wx\_core.py", line 8196, in _BootstrapApp return _core_.PyApp__BootstrapApp(*args, **kwargs) File "C:\Users\VMR\Desktop\library\Library.py", line 209, in OnInit style=wx.DEFAULT_FRAME_STYLE^wx.MAXIMIZE_BOX^wx.RESIZE_BORDER) File "C:\Users\VMR\Desktop\library\Library.py", line 22, in __init__ self.properties = json.loads(file.read()) File "C:\Python27\lib\json\__init__.py", line 338, in loads return _default_decoder.decode(s) File "C:\Python27\lib\json\decoder.py", line 365, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "C:\Python27\lib\json\decoder.py", line 381, in raw_decode obj, end = self.scan_once(s, idx) ValueError: Expecting property name: line 1 column 2 (char 1)
Офлайн
253
A.N.OnimЭто как вы такое получили?
А вот когда записываешь словарь в файл, то в него записывается, такое:
import json a={u'id': 0, u'df': 78} json.dump(a,open("out.json","w"))
{"df": 78, "id": 0}
Офлайн
0
self.properties['id'] += 1 file = open("./data/preferences.txt", 'wt') file.write(str(self.properties)) file.close()
Отредактировано A.N.Onim (Фев. 13, 2016 15:33:55)
Офлайн
568
Какой нафиг битный код, JSON - текстовый формат.
Офлайн
0
FishHookЭто я знаю. Но вот что пишет документация:
Какой нафиг битный код, JSON - текстовый формат.
json.dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, encoding=“utf-8”, default=None, sort_keys=False, **kw)
Сериализует obj как форматированный JSON поток в fp (файло-подобный объект, поддерживающий метод .write()) используя эту таблицу преобразования.
Сериализация (в программировании) — процесс перевода какой-либо структуры данных в последовательность битов. Обратной к операции сериализации является операция десериализации (структуризации) — восстановление начального состояния структуры данных из битовой последовательности.
Офлайн
0
Что не так? Есть код:
self.properties = json.loads(open("./data/preferences.txt").read())
{'id': 8, ‘df’: 4}а выдает все ту же ошибку:
Офлайн
568
хоспаде
self.properties = json.loads("./data/preferences.txt")
Офлайн
0
Все решил, все получилось! Спасибо. Просто нужно кавычки в файле ставить двойные, если вручную пишешь файл и вибирать правильно ф-цию dump/dumps. 
Офлайн
253
Если вы собираетесь самостоятельно файл вбивать то документацию по формату прочитайте.
http://www.json.org/json-ru.html
Или проверйте то что написали.
http://jsonlint.com/
Отредактировано doza_and (Фев. 13, 2016 17:38:21)
Офлайн
0
doza_and, спасибо!
Офлайн