今天在跟前端同事聯調的時候發現個很奇怪的問題:明明傳過來的是json型別的列表,但是在進行反序列化的時候總會上報json.decoder.jsondecodeerror!
最後終於找到了原因,這裡記錄一下。
我們都知道,python內建函式 repr 可以列印出資料原生的面貌,我們來看一下前端同事傳過來的json資料長什麼樣:
是的!你沒有看錯!傳來的字串是雙引號套著單引號!網上查了一下資料:json在進行反序列化的時候是不支援單引號的!因此我們需要將前端傳過來的單引號的資料轉換為雙引號!
我這裡寫了乙個方法來解決這個問題:
def replace_comma(word:str)->str:實際使用的時候我們可以先捕獲一下異常,如果出現了異常再進行轉換:""":param word: ['0101','0202']
:return: ["0101","0202"]
"""word_p = repr(word) #
"['0101','1202']"
word_p = word_p.replace("
'",'"'
)
#返回的時候:第乙個跟最後乙個引號不返回!
return word_p[1:-1]
import結果如下:json
err = "
['0101','1202']
"# 模擬前端傳來的雙引號套單引號的資料
defreplace_comma(word:str)->str:# 注意輸入與返回的都是字串!!!
""":param word: ['0101','0202']
:return: ["0101","0202"]
"""word_p = repr(word) #
"['0101','1202']"
word_p = word_p.replace("
'",'"'
)
#返回的時候:第乙個跟最後乙個引號不返回!
return word_p[1:-1]
try:
err_lst =json.loads(err)
exceptjson.decoder.jsondecodeerror:
print("
發生異常啦!!!")
err =replace_comma(err)
err_lst =json.loads(err)
print(err_lst,type(err_lst))
這樣成功進行了json的反序列化操作。
json.parse()
parse()方法用於從乙個json格式的字串中解析出object物件:
var str=''// 經 json.parse(str) 得到:object : age:"18",單引號必須寫在括號外,每個屬性都必須雙引號引起來,否則會丟擲異常!!!name:"whw",
proto_:object
json.stringify()
stringify()方法用於從乙個物件中解析出json字串。
var obj=~~~//
經 json.stringify(obj) 解析後得到""
C 中json字串的序列化和反序列化
具體使用 右鍵專案 nuget包管理 新增 newtonsoft.json 引入命名空間 using newtonsoft.json 定義類 public class student public string name public int age public string 序列化和反序列化實體...
C 下JSON字串的反序列化
c 下json字串的反序列化,一般都是用newtonsoft.json,比較方便。net當然也有提供相應功能,但覺得比較複雜。所謂反序列化,就是將乙個包含json內容的字串,轉換回指定物件 不一定是轉換回json物件 方法是 using newtonsoft.json jsonconvert.des...
C 下JSON字串的反序列化
c 下json字串的反序列化,一般都是用newtonsoft.json,比較方便。net當然也有提供相應功能,但覺得比較複雜。所謂反序列化,就是將乙個包含json內容的字串,轉換回指定物件 不一定是轉換回json物件 方法是 using newtonsoft.json jsonconvert.des...