2010-10-19 75 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} 
相關問題