需要將一個 python 的字符串轉爲字典,比如字符串:
user_info = ‘{“name” : “john”, “gender” : “male”, “age”: 28}’
把它轉爲下面的字典:
user_dict = {“name” : “john”, “gender” : “male”, “age”: 28}
1、通過 json 來轉換
import json
user_info= ‘{“name” : “john”, “gender” : “male”, “age”: 28}’
user_dict = json.loads(user_info)
user_dict
{u’gender’: u’male’, u’age’: 28, u’name’: u’john’}
但是使用 json 進行轉換存在一個潛在的問題。
由於 json 語法規定 數組或對象之中的字符串必須使用雙引號,不能使用單引號
2、通過 eval
user_info = ‘{“name” : “john”, “gender” : “male”, “age”: 28}’
user_dict = eval(user_info)
user_dict
{‘gender’: ‘male’, ‘age’: 28, ‘name’: ‘john’}user_info = “{‘name’ : ‘john’, ‘gender’ : ‘male’, ‘age’: 28}”
user_dict = eval(user_info)
user_dict
{‘gender’: ‘male’, ‘age’: 28, ‘name’: ‘john’}
通過 eval 進行轉換就不存在上面使用 json 進行轉換的問題。但是,使用 eval 卻存在安全性的問題,比如下面的例子:
#讓用戶輸入‘user_info’
user_info = raw_input('input user info: ')
#輸入 {“name” : “john”, “gender” : “male”, “age”: 28},沒問題user_dict = eval(user_info)
#輸入 import(‘os’).system(‘dir’),user_dict 會列出當前的目錄文件!
#再輸入一些刪除命令,則可以把整個目錄清空了!user_dict = eval(user_info)
3、通過 literal_eval
import ast
user = ‘{“name” : “john”, “gender” : “male”, “age”: 28}’
user_dict = ast.literal_eval(user)
user_dict
{‘gender’: ‘male’, ‘age’: 28, ‘name’: ‘john’}
user_info = “{‘name’ : ‘john’, ‘gender’ : ‘male’, ‘age’: 28}”user_dict = ast.literal_eval(user)
user_dict
{‘gender’: ‘male’, ‘age’: 28, ‘name’: ‘john’}
使用 ast.literal_eval 進行轉換既不存在使用 json 進行轉換的問題,也不存在使用 eval 進行轉換的 安全性問題,因此推薦使用 ast.literal_eval。
轉載:https://www.cnblogs.com/OnlyDreams/p/7850920.html