2012-06-13 3 views
1

Я обновляю старый проект, который использовал старую версию cjson для ускорения кодировки json. Он также имеет собственный класс под названием JSONString (который устанавливает строку в свое свойство value), который используется для связи с базой данных.Python CJSON кодирование пользовательских объектов

Он используется для вызова cjson.encode ((Dict, содержащий JSONString), (обычай, кодирующий FUNCT для JSONSTRING)), но более новую версию cjson изменил свои параметры только принимать один аргумент, и не подвергая любые другие функции, которые могут позволить настраивать процесс кодирования. Кодирование dict без пользовательского кодировщика вызывает EncodeError (объект не кодируется JSON).

Теперь у меня есть возможность выяснить, как использовать пользовательские кодеры в cjson, изменить источник cjson (пытаясь избежать библиотек исправления) или сделать так, чтобы тип JSONString, вставленный в dict, преобразовывался в строку перед операцией, но я стараюсь избегать размещения «исправлений» по всему коду (компартментализация и повторное использование и все такое). Модификация JSONString в некотором роде так, что кодер берет строковое значение, вместо того, чтобы бросать исключение, тоже будет работать, но я не знаю достаточных причуд python для этого. Я могу понять, почему cjson может не разрешать настраиваемые кодеры (причины скорости), но если нет способа, мне просто нужно найти что-то еще.

Любые предложения были бы весьма полезными.

+1

Кто-то выпустил «улучшенную» версию cjson, которая поддерживает кодирование пользовательских объектов. См. Это сообщение в списке рассылки python: http://mail.python.org/pipermail/python-announce-list/2007-March/005692.html Пожалуйста, имейте в виду, что я не использовал это сам, поэтому я не Не знаю, действительно ли это работает. – Yavar

+0

О, ничего себе. Я был на этом сайте, но неправильно понял, что это было. Я думал, что это официальный сайт cjson, который в последний раз был обновлен с инструкциями для cjson 1.0.3, и каким-то образом версия 1.0.5 (текущая) удалила эту способность. Жаль, что это не стандартная версия и в репозиториях ubuntu. Спасибо за помощь, я не знаю, как отметить этот комментарий как правильный ответ. –

ответ

0

Просмотрев мои сообщения без ответа и вспомнил, что я не отмечал это, как ответил. Сообщение Явара помогло; есть расширенная версия cjson для python. Он работает хорошо, но иногда имеет несколько интересных столкновений имен, поэтому имейте это в виду.

http://python.cx.hu/python-cjson/

Смежные вопросы