最近在寫一個腳本,需要處理從excel中讀取的數據,發現讀取的json格式數據進行轉換時報錯
ValueError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
網上查了是因為json的key沒有雙引號,導致json解析錯誤的。
為了處理讀取的數據從str轉換為json查了一下str和json格式轉換:
1.)str轉json
str轉換為json格式,前提一定需要保證這個str的格式和json是一致的,即左邊最外層是大括號,右邊的最外層是大括號。如果不一致,推薦用正則進行拆分至和json格式一致
1. 通過json.loads進行轉換
1 import json 2 str = '{"key": "wwww", "word": "qqqq"}' 3 j = json.loads(str) 4 print(j) 5 print(type(j))
但是值得注意的是,json中內部數據需要用雙引號來包圍,不能使用單引號,如剛才的寫法,如果寫成這樣,就會發生錯誤:
str = “{‘key’: ‘wwww’, ‘word’: ‘qqqq’}“
j = json.loads(str)
2. 通過eval
eval函數的官方解釋為:將字符串str當成有效的表達式來求值並返回計算結果。
即通過eval可以把list,tuple,dict和string相互轉化,例如:
a = "[[1,2], [3,4], [5,6], [7,8], [9,0]]"
b = eval(a)
type(b)
list
a = "{1: 'a', 2: 'b'}"
b = eval(a)
type(b)
dict
a = "([1,2], [3,4], [5,6], [7,8], (9,0))"
b = eval(a)
type(b)
tuple
同樣,值得注意的是,eval()可以通過運行系統的命令,如:
eval("__import__('os').startfile('notepad.exe')") #啟動記事本程序
那么為了保證安全,當需要用戶輸入時,可以對用戶輸入進行敏感字符檢查和過濾
3. literal_eval
和eval用法相同,都可以將字符串str解析成list,tuple,dict,而且避免了eval的安全性的問題
import ast
a = "{1: 'a', 2: 'b'}"
b = ast.literal_eval(a)
type(b)
dict
json轉str
使用json.dumps的方法,可以將json對象轉化為字符串
data = {'name':'wjp','age':'22'}
data = json.dumps(data)
原文:https://blog.csdn.net/qq_29027865/article/details/83819049