Как разобрать несколько неправильный JSON с Python? - PullRequest
33 голосов
/ 19 декабря 2009

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

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

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

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

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

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

Ответы [ 4 ]

42 голосов
/ 19 декабря 2009

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

>>> import yaml
>>> s = '{value: "82363549923gnyh49c9djl239pjm01223", id: 17893}'
>>> yaml.load(s)
{'id': 17893, 'value': '82363549923gnyh49c9djl239pjm01223'}
19 голосов
/ 26 ноября 2014

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

>>> import demjson
>>> demjson.decode('{foo:3}')
{u'foo': 3}
1 голос
/ 19 декабря 2009

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

0 голосов
/ 20 декабря 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...