У меня есть следующая строка JSON, прибывающая из внешнего входного источника:
{value: "82363549923gnyh49c9djl239pjm01223", id: 17893}
Это отформатировано несправедливостью строка JSON ("идентификатор", и "значение" должно быть в кавычках), но я должен проанализировать его так или иначе. Я попробовал simplejson и json-py, и кажется, что они не могли быть настроены для парсинга таких строк.
Я запускаю Python 2.5 на механизме Google App, таким образом, любые решения на базе С как python-cjson не применимы.
Формат ввода мог быть изменен на XML или YAML в дополнении к упомянутому выше JSON, но я использую JSON в рамках проекта и изменяюсь, формат в определенном месте не был бы очень хорош.
Теперь я переключился на XML и парсинг данных успешно, но нетерпеливое ожидание любого решения, которое позволило бы мне переключаться назад на JSON.
, поскольку YAML (> = 1.2) является расширенным набором JSON, вы можете:
>>> import yaml
>>> s = '{value: "82363549923gnyh49c9djl239pjm01223", id: 17893}'
>>> yaml.load(s)
{'id': 17893, 'value': '82363549923gnyh49c9djl239pjm01223'}
Pyparsing включает парсер JSON Например, вот онлайн-источник . Вы можете изменить определение memberDef, чтобы разрешить строку без кавычек для имени члена, а затем вы можете использовать это для синтаксического анализа исходного текста не совсем в формате JSON.
На этой странице также есть информация и ссылка к моей статье в августовском выпуске журнала Python Magazine за 2008 г., где есть гораздо более подробная информация об этом парсере. На странице показан образец JSON и код, который обращается к анализируемым результатам, как к десериализованному объекту.
Вы можете использовать синтаксический анализатор строк, чтобы сначала исправить это, регулярное выражение может сделать это при условии, что это так же сложно, как JSON.