json反序列化的時候字串為單引號的乙個坑

2022-04-29 02:24:09 字數 1964 閱讀 5650

今天在跟前端同事聯調的時候發現個很奇怪的問題:明明傳過來的是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...