Разбор JSON с Python - PullRequest
       2

Разбор JSON с Python

0 голосов
/ 01 июля 2010

Я получаю сообщение об ошибке при синтаксическом анализе ответа JSON в Python. Пример:

{
    "oneliners": [
        "she\'s the one",
        "who opened the gates"
    ]
}

JSON-декодер выводит из строя недопустимый escape в одинарной кавычке. Как правило, люди применяют REGEX для удаления символа косой черты перед декодированием ответа, который потенциально может содержать недопустимый escape?

Ответы [ 3 ]

1 голос
/ 01 июля 2010

, если у вас есть \' последовательность символов в вашем строковом представлении JSON, и вы ЗНАЕТЕ, что это должно быть ', это означает, что оно было неправильно экранировано раньше, вы должны исправить проблему там.

, если выне можете, вы должны выполнить замену, прежде чем предоставить такую ​​строку для анализатора JSON.simplejson не удастся проанализировать его, cjson или anyjson не удастся, но обработает его буквально, так что в полученных данных будет последовательность обратный слеш-апостроф.

1 голос
/ 01 июля 2010

Pyparsing корабли с примером анализа JSON (или вы можете получить его онлайн здесь ):

>>> text = r"""{
...     "oneliners": [
...         "she\'s the one",
...         "who opened the gates"
...     ]
... } """
>>> text
'{       \n    "oneliners": [       \n        "she\\\'s the one",       \n        "who opened the gates"       \n    ]       \n} '
>>> obj = jsonObject.parseString(text)
>>> obj.asList()
[['oneliners', ["she\\'s the one", 'who opened the gates']]]
>>> obj.asDict()
{'oneliners': (["she\\'s the one", 'who opened the gates'], {})}
>>> obj.oneliners
(["she\\'s the one", 'who opened the gates'], {})
>>> obj.oneliners.asList()
["she\\'s the one", 'who opened the gates']

Не пугайтесь кажущегося включения dict ('{}') в obj.oneliners, который является просто выводом repr для pyparsing объекта ParseResults. Вы можете просто обращаться с obj.oneliners как с обычным списком или, если хотите, извлекать его содержимое в виде списка, используя asList, как показано.

0 голосов
/ 01 июля 2010
import json
s = """{
 "oneliners": [
 "she\'s the one",
 "who opened the gates"
 ]
}"""

print "%r" % json.loads(s)

Похоже, что это работает нормально, в Python 2.6 и выше.

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