eval()和json.loads() 都可以將字符串轉換成對應的python數據類型,舉個字典的例子,同樣適合其他數據類型元組、列表、集合。
In [3]: ss = '{"a":1,"b":2}' In [4]: type(eval(ss)) Out[4]: dict In [7]: type(json.loads(ss)) Out[7]: dict
json一種輕量級數據交換格式,可以將json對象當作比較特殊的字符串,eval與json.loads都可以將大部分的JSON串轉成python對象,但也有區別:
>>> import json >>> s = '{"one":1,"two":2}' >>> json.loads(s) {u'two': 2, u'one': 1} >>> eval(s) {'two': 2, 'one': 1}
json.loads與eval都能將s轉成python中的對象,json.loads將json中的字符串轉成unicode(types.UnicodeType),eval轉成了str(types.StringType)。
對於普通的數據類型,json.loads和eval都能用,但:
>>> x="[null,true,false,1]" >>> json.loads(x) [None, True, False, 1] >>> eval(x) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<string>", line 1, in <module> NameError: name 'null' is not defined
在遇到特殊類型的時候,eval就不管用了。
在python中使用json.loads() (用於將json對象轉換成python對應的數據類型)和json.dumps()用於將python數據類型轉換成json對象,下面舉個例子
In [10]: ss Out[10]: '{"a":1,"b":2}' In [11]: a = json.loads(ss) In [12]: type(a) Out[12]: dict In [13]: x = json.dumps(a) In [14]: type(x) Out[14]: str