方法一: 通过内置函数eval
1 2 3 4 5 6 7 8 9 10 11 12 13 |
str_info = '{"name": "test", "age": 18}' dict_info = eval (str_info) print ( "string info type is -->: %s" % ( type (str_info))) print ( "dict info type is -->: %s" % ( type (dict_info))) print (dict_info) s_info = "{'name': 'nock', 'age': 18}" d_info = eval (s_info) print ( "string info type is -->: %s" % ( type (s_info))) print ( "dict info type is -->: %s" % ( type (d_info))) print (d_info) |
1 2 3 4 5 6 7 8 9 |
F:\python\python35\python.exe E: / code / clself / Test / test_example1.py string info type is - - >: < class 'str' > dict info type is - - >: < class 'dict' > { 'name' : 'test' , 'age' : 18 } string info type is - - >: < class 'str' > dict info type is - - >: < class 'dict' > { 'name' : 'nock' , 'age' : 18 } Process finished with exit code 0 |
不过使用eval有一个安全性问题
方法二: 通过json模块处理
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import json str_info = '{"name": "test", "age": 18}' dict_info = json.loads(str_info) print ( "string info type is -->: %s" % ( type (str_info))) print ( "dict info type is -->: %s" % ( type (dict_info))) print (dict_info) s_info = "{'name': 'nock', 'age': 18}" d_info = json.loads(s_info) print ( "s info type is -->: %s" % ( type (s_info))) print ( "d info type is -->: %s" % ( type (d_info))) print (d_info) |
结果如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
F:\python\python35\python.exe E: / code / clself / Test / test_example1.py string info type is - - >: < class 'str' > dict info type is - - >: < class 'dict' > { 'name' : 'test' , 'age' : 18 } Traceback (most recent call last): File "E:/code/clself/Test/test_example1.py" , line 10 , in
d_info = json.loads(s_info) File "F:\python\python35\lib\json\__init__.py" , line 319 , in loads return _default_decoder.decode(s) File "F:\python\python35\lib\json\decoder.py" , line 339 , in decode obj, end = self .raw_decode(s, idx = _w(s, 0 ).end()) File "F:\python\python35\lib\json\decoder.py" , line 355 , in raw_decode obj, end = self .scan_once(s, idx) json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1 ) Process finished with exit code 1 |
使用json
模块进行转换存在一个问题,由于json
语法规定 数组或对象之中的字符串必须使用双引号,不能使用单引号
方法三: 通过ast模块处理【推荐使用】
import ast
str_info = '{"name": "test", "age": 18}'
dict_info = ast.literal_eval(str_info)
print("string info type is -->: %s" % (type(str_info)))
print("dict info type is -->: %s" % (type(dict_info)))
print(dict_info)
s_info = "{'name': 'nock', 'age': 18}"
d_info = ast.literal_eval(s_info)
print("s info type is -->: %s" % (type(s_info)))
print("d info type is -->: %s" % (type(d_info)))
print(d_info)
1 2 3 4 5 6 7 |
F:\python\python35\python.exe E: / code / clself / Test / test_example1.py string info type is - - >: < class 'str' > dict info type is - - >: < class 'dict' > { 'name' : 'test' , 'age' : 18 } s info type is - - >: < class 'str' > d info type is - - >: < class 'dict' > { 'name' : 'test' , 'age' : 18 } |
使用ast.literal_eval
进行转换既不存在使用json
模块进行转换的问题,也不存在使用eval
模块进行转换的安全性问题,因此推荐大家使用ast.literal_eval
的方法。