python将字符串转换成对应的python数据类型--eval和json.loads(),json.dumps()
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