python如何将字符串转换成json的几种办法
2020-12-13 05:51
标签:air 必须 pair scan 操作 dict framework 怎么 wrap 上面的例子可以看出进行转换的时候不存在使用json转换的问题,但是我们需要注意的是使用eval会存在安全问题,比如: 使用 ast.literal_eval 进行转换既不存在使用 json 进行转换的问题,也不存在使用 eval 进行转换的 安全性问题,因此推荐使用 ast.literal_eval。 python如何将字符串转换成json的几种办法 标签:air 必须 pair scan 操作 dict framework 怎么 wrap 原文地址:https://blog.51cto.com/legehappy/2418264
1、通过json来转换:
In [1]: import json
In [2]: mes = ‘{"InsId": 2, "name": "lege-happy", "CreationTime": "2019-04-23T03:18:02Z"}‘
In [3]: mes_to_dict = json.loads(mes)
In [4]: print type(mes_to_dict)
In [5]: import json
In [6]: mes = "{‘InsId‘: 1, ‘name‘: ‘lege-error‘, ‘CreationTime‘: ‘2019-04-24T03:18:02Z‘}"
In [7]: mes_to_dict = json.loads(mes)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
通过eval来转换:
In [8]: mes = ‘{"InsId": 2, "name": "lege-happy", "CreationTime": "2019-04-23T03:18:02Z"}‘
In [9]: mes_dict = eval(mes)
In [10]: print type(mes_dict)
In [14]: value = eval(raw_input(‘please input a value string:‘))
please input a value string:2 + 2
In [15]: value
Out[15]: 4
比如说用户恶意输入下面的字符串:open(r‘D://filename.txt‘, ‘r‘).read()
__import__(‘os‘).system(‘dir‘)
__import__(‘os‘).system(‘rm -rf /etc/*‘)
通过literal_eval转换:
In [20]: import ast
In [21]: mes = ‘{"InsId": 2, "name": "lege-happy", "CreationTime": "2019-04-23T03:18:02Z"}‘
In [22]: mes_dict = ast.literal_eval(mes)
In [23]: print type(mes_dict)
def literal_eval(node_or_string):
"""
Safely evaluate an expression node or a string containing a Python
expression. The string or node provided may only consist of the following
Python literal structures: strings, numbers, tuples, lists, dicts, booleans,
and None.
"""
比如说上面的计算操作,及危险操作,如果换成了ast.literal_eval(),都会拒绝执行。所以个人推荐大家转换dict的时候,出于安全考虑对字符串进行类型转换的时候,最好使用ast.literal_eval()函数!