Python 内置函数eval()
eval(expression, globals=None, locals=None) 函数用来执行一个字符串表达式,并返回表达式的值。
- expression: 字符串表达式。
- global: 可选,globals必须是一个字典。
- locals: 可选,locals可以是任何映射对象。
示例
>>> x = 1
>>> eval('x + 1')
2
>>> eval('pow(2, 3)')
8
>>> eval('[1, 2, 3]')
[1, 2, 3]
>>> eval('{"name": "白子画", "age": 1000}')
{'name': '白子画', 'age': 1000}
将Json字符串转为Python字典
>>> msg = '{"name": "白子画", "married": false, "spouse": null}'
>>> eval(msg)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1, in <module>
NameError: name 'false' is not defined
由于Json中的布尔类型、空类型与Python中的不一致,所以直接用eval(expression)将会报错。
有两种方法可以解决:
-
方法一:转换之前先定义好无法识别的类型。
>>> false = False >>> null = None >>> msg = '{"name": "白子画", "married": false, "spouse": null}' >>> eval(msg) {'name': '白子画', 'married': False, 'spouse': None}
-
方法二:转换时携带定义无法识别类型的字典。
>>> msg = '{"name": "白子画", "married": false, "spouse": null}' >>> eval(msg, {'false': False, "null": None}) {'name': '白子画', 'married': False, 'spouse': None}