2010-10-19 34 views
4

我使用Beej的Python Flickr API向Flickr请求JSON。未经解析字符串的Flickr返回看起来是这样的:如何确保我的Python正则表达式输出字典?

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'}"] 

我如何能确保我的分析数据作为字典式结束

回答

1

您需要使用JSON解析器的字符串表示转换为实际的Python数据结构。查看标准库中的json模块的文档以获取一些示例。

换句话说,你不得不在你的代码

photos = json.loads(parsed_photos[0]) 

PS的末尾添加以下行。从理论上讲,你也可以使用eval来达到同样的效果,因为JSON(几乎)与Python文字兼容,但这样做会带来巨大的安全漏洞。只是让你知道。

+0

不完全正确 - 您无法使用eval,因为JSON与Python文字不兼容。例子:Python使用'None'; JSON使用'null'。 Python使用'True' /'False'; JSON使用'true' /'false' – Smashery 2010-10-19 01:05:22

+0

@Smashery:这不是一个语法上的差异,你只需要定义null/true/false的地方,一切都会好的。这不是我推荐的东西,只是使用库。 – 2010-10-19 01:10:01

+0

我用你的第一个建议来得到一本字典 - 非常感谢!你能解释一下parsed_photos [0]中的[0]代表什么? – oldpal 2010-10-19 01:23:49

1

如果你使用的是Python 2.6,你可以使用JSON模块来解析JSON的东西。

import json 
json.loads(dictString) 

如果你正在使用Python的早期版本,您可以下载simplejson模块,并使用它。

例子:

>>> json.loads('{"hello" : 4}') 
{u'hello': 4} 
相关问题