2013-02-18 68 views
0

列出我需要一個字符串轉換爲Python的list, 字符串格式如下,字符串轉換爲在python

'[{"name":"Tom","adress":"adress1"},{"name":"Mari","adress":"adress2"}]' 

我需要這個在轉換到Python 列表數據類型,並希望通過迭代生成的列表來獲取字典。

我試過json庫,沒有運氣。 >更正(json.loads正在工作。)

請問您可以告訴我正確的方法嗎?

+0

'json'庫加載你的例子很好。你遇到了什麼問題? – 2013-02-18 14:05:01

+0

你能展示你的嘗試嗎? – mgilson 2013-02-18 14:05:02

+0

所以如果使用'json'工作,實際的問題是什麼? :-) – 2013-02-18 14:17:33

回答

5

你可以ast.literal_eval它沒有任何問題。

>>> s = '[{"name":"Tom","adress":"adress1"},{"name":"Mari","adress":"adress2"}]' 
>>> import ast 
>>> ast.literal_eval(s) 
[{'adress': 'adress1', 'name': 'Tom'}, {'adress': 'adress2', 'name': 'Mari'}] 

json.loads似乎並沒有與它無論是什麼問題...

>>> import json 
>>> json.loads(s) 
[{u'adress': u'adress1', u'name': u'Tom'}, {u'adress': u'adress2', u'name': u'Mari'}] 
>>> 
+0

是的兩個工作。我將編輯我的帖子 – 2013-02-18 14:08:42

+0

另一種方法是使用'eval()',儘管它是不安全的。 – kaspersky 2013-02-18 14:09:17

+1

@ gg.kaspersky - 爲什麼在標準庫中有一個安全的替代方案時提示'eval'? – mgilson 2013-02-18 14:09:57

3

正如一些評論所指出的,在eval內置功能能夠分析這樣的字符串,但不安全!所以ast.literal_eval方法應該是首選。

+2

如果'ast.literal_eval'可以處理它,當然''eval'可以。但是爲什麼在'ast.literal_eval'就足夠時使用'eval'呢? – mgilson 2013-02-18 14:10:30

+1

古老的'eval'也很容易導致嚴重的安全漏洞。 – interjay 2013-02-18 14:11:33