Подтвердить что ты не робот

Как разобрать несколько неправильных JSON с Python?

У меня есть следующая строка JSON, поступающая из внешнего источника ввода:

{value: "82363549923gnyh49c9djl239pjm01223", id: 17893}

Это строка JSON с неправильным форматированием ( "id" и "value" должны быть в кавычках), но мне все равно нужно разбирать ее. Я пробовал simplejson и json-py, и кажется, что они не могут быть настроены для синтаксического анализа таких строк.

Я запускаю Python 2.5 в Google App engine, поэтому любые решения на основе C, такие как python-cjson, не применимы.

Формат ввода может быть изменен на XML или YAML, в дополнение к JSON, перечисленным выше, но я использую JSON в проекте, и изменение формата в определенном месте будет не очень хорошим.

Теперь я переключился на XML и проанализировал данные успешно, но с нетерпением жду любого решения, которое позволило бы мне вернуться к JSON.

4b9b3361

Ответ 1

так как YAML ( >= 1.2) является надмножеством JSON, вы можете сделать:

>>> import yaml
>>> s = '{value: "82363549923gnyh49c9djl239pjm01223", id: 17893}'
>>> yaml.load(s)
{'id': 17893, 'value': '82363549923gnyh49c9djl239pjm01223'}

Ответ 2

Вы можете использовать demjson.

>>> import demjson
>>> demjson.decode('{foo:3}')
{u'foo': 3}

Ответ 3

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

Ответ 4

Pyparsing включает пример парсера JSON, вот онлайн-источник. Вы можете изменить определение memberDef, чтобы разрешить строку без кавычек для имени участника, а затем вы можете использовать это для анализа исходного текста вашего не-вполне-JSON.

Эта страница также содержит информацию и ссылку на мою статью в выпуске журнала Python за август 2008 года, в котором содержится намного больше подробностей информация об этом парсере. На странице показан пример JSON и код, который обращается к анализируемым результатам, как к десериализованному объекту.