在工作中我們經常會遇到資料型別之間的互轉的問題,而通常我們請求一些api藉口返回的結果就是字串,但是格式是json的,在python中轉為字典是最易處理的,所以這裡記錄一下在python下把字串轉為字典的三種方法。
source code:
#!/usr/bin/env python3
#author: nock.chen
str_info = ""
dict_info = eval(str_info)
print("string info type is -->: %s" % (type(str_info)))
print("dict info type is -->: %s" % (type(dict_info)))
複製**
result:
string info type is -->: 'str'>
dict info type is -->: 'dict'>
複製**
不過使用eval有乙個安全性問題,示例如下:
source code:
#!/usr/bin/env python3
#author: nock.chen
str_info = input('input str info: ')
dict_info = eval(str_info)
print("dict_info is >%s< " % dict_info)
複製**
result:
input str info: __import__('os').system('ls')
collector_data.py
test.py
download
dict_info is >0<
複製**
如上所示當我們輸入__import__('os').system('ls')
的時候會列印出指令碼所存目錄下的檔案,如果傳入乙個rm -rf *
之類的命令,那則會把所有改目錄下的東西刪除掉;當然我們這麼去用的場景會非常好少,也不可能有人會這麼傳值,不過這裡說明一下。
source code:
#!/usr/bin/env python3
#author: nock.chen
import json
str_info = ''
dict_info = json.loads(str_info)
print("string info type is -->: %s" % (type(str_info)))
print("dict info type is -->: %s" % (type(dict_info)))
複製**
result:
string info type is -->: 'str'>
dict info type is -->: 'dict'>
複製**
使用json
模組進行轉換也存在乙個問題,由於json
語法規定 陣列或物件之中的字串必須使用雙引號,不能使用單引號, 官網上有一段描述是:
報錯示例如下:
#!/usr/bin/env python3
#author: nock.chen
import json
str_info = ""
dict_info = json.loads(str_info)
複製**
報錯結果如下:
traceback (most recent call last):
file "test.py", line 7, in
dict_info = json.loads(str_info)
file "/usr/local/cellar/python3/3.5.1/frameworks/python.framework/versions/3.5/lib/python3.5/json/__init__.py", line 319, in loads
return _default_decoder.decode(s)
file "/usr/local/cellar/python3/3.5.1/frameworks/python.framework/versions/3.5/lib/python3.5/json/decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
file "/usr/local/cellar/python3/3.5.1/frameworks/python.framework/versions/3.5/lib/python3.5/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)
複製**
source code:
#!/usr/bin/env python3
#author: nock.chen
import ast
str_info = ''
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)))
s_info = ""
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)))
複製**
result:
string info type is -->: 'str'>
dict info type is -->: 'dict'>
s info type is -->: 'str'>
d info type is -->: 'dict'>
複製**
使用ast.literal_eval
進行轉換既不存在使用json
模組進行轉換的問題,也不存在使用eval
模組進行轉換的安全性問題,因此推薦大家使用ast.literal_eval
的方法。 Python 將字串轉為字典
在工作中遇到乙個小問題,需要將乙個python的字串轉為字典,比如字串 user info 我們想把它轉為下面的字典 user dict 有以下幾種方法 import json user info user dict json.loads user info user dict 但是使用json進行...
Python 如何將字串轉為字典
在工作中遇到乙個小問題,需要將乙個python的字串轉為字典,比如字串 user info 我們想把它轉為下面的字典 user dict 有以下幾種方法 1 通過 json 來轉換 import json user info user dict json.loads user info user d...
Python 如何將字串轉為字典
在工作中遇到乙個小問題,需要將乙個 python 的字串轉為字典,比如字串 user info 我們想把它轉為下面的字典 user dict 有以下幾種方法 1 通過 json 來轉換 import json user info user dict json.loads user info user...