Python 字典兩端加引號後如何重新轉爲字典

需要將一個 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章