Как я могу убедиться, что мое регулярное выражение Python выводит словарь? - PullRequest
4 голосов
/ 19 октября 2010

Я использую Python Flickr API от Beej, чтобы спросить у Flickr JSON. Не разбираемая строка, которую возвращает Flickr, выглядит так:

jsonFlickrApi({'photos': 'example'})

Я хочу получить доступ к возвращенным данным в виде словаря, поэтому у меня есть:

photos = "jsonFlickrApi({'photos': 'test'})"

# to match {'photos': 'example'}
response_parser = re.compile(r'jsonFlickrApi\((.*?)\)$')
parsed_photos = response_parser.findall(photos)

Тем не менее, parsed_photos - это список, а не словарь (в зависимости от типа (parsed_photos). Он выводит как:

["{'photos': 'test'}"]

Как я могу гарантировать, что мои проанализированные данные будут представлены в виде словаря?

Ответы [ 2 ]

1 голос
/ 19 октября 2010

Вам нужно использовать анализатор JSON для преобразования строкового представления в фактическую структуру данных Python. Посмотрите на документацию модуля json в стандартной библиотеке для некоторых примеров.

Другими словами, вам нужно добавить следующую строку в конце кода

photos = json.loads(parsed_photos[0])

PS. Теоретически вы также можете использовать eval для достижения того же эффекта, так как JSON (почти) совместим с литералами Python, но это приведет к огромной дыре в безопасности. Просто чтобы вы знали.

1 голос
/ 19 октября 2010

Если вы используете Python 2.6, вы можете просто использовать модуль JSON для разбора содержимого JSON.

import json
json.loads(dictString)

Если вы используете более раннюю версию Python, вы можете загрузить модуль simplejson и используйте его.

Пример:

>>> json.loads('{"hello" : 4}')
{u'hello': 4}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...