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

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

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

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

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

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

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

35
задан serv-inc 22 October 2017 в 07:27
поделиться

3 ответа

, поскольку YAML (> = 1.2) является расширенным набором JSON, вы можете:

>>> import yaml
>>> s = '{value: "82363549923gnyh49c9djl239pjm01223", id: 17893}'
>>> yaml.load(s)
{'id': 17893, 'value': '82363549923gnyh49c9djl239pjm01223'}
46
ответ дан 27 November 2019 в 07:00
поделиться

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

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

0
ответ дан 27 November 2019 в 07:00
поделиться

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

1
ответ дан 27 November 2019 в 07:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: