Python存儲(chǔ)或讀取json時(shí)如何引入額外的雙引號(hào)和轉(zhuǎn)義引號(hào)
Python存儲(chǔ)或讀取json時(shí)引入額外的雙引號(hào)和轉(zhuǎn)義引號(hào)
最近在解析json時(shí)發(fā)現(xiàn)value部分引入了不少額外的雙引號(hào)和轉(zhuǎn)義引號(hào),
具體如下:
"test_str":"{\"created_time\": \"Fri_Aug_08 11:04:40 +0000 2014\"}"
下面解釋下如何在存儲(chǔ)和讀取json文件時(shí)避免這種情況。
如何在存儲(chǔ)時(shí)避免
存儲(chǔ)這里如果能規(guī)避掉,就可以讓解析的同學(xué)解析更加方便。
因?yàn)槭谴鎯?chǔ)時(shí)寫(xiě)入了雙重編碼JSON字符串,所以才會(huì)出現(xiàn)這種情況。
所以寫(xiě)入文件時(shí)檢查一下是否進(jìn)行了多次編碼。
>>> import json >>> not_encoded = {"created_at":"Fri Aug 08 11:04:40 +0000 2014"} >>> encoded_data = json.dumps(not_encoded) >>> print encoded_data {"created_at": "Fri Aug 08 11:04:40 +0000 2014"} >>> double_encode = json.dumps(encoded_data) >>> print(double_encode) "{\"created_at\": \"Fri Aug 08 11:04:40 +0000 2014\"}"
如何在解析時(shí)避免
調(diào)用第三方庫(kù)demjson,記得先安裝庫(kù)python -m pip install demjson。
>>> import demjson >>> test = r'"{\"created_time\": \"Fri_Aug_08 11:04:40 +0000 2014\"}"' >>> json_str = demjson.decode(test) >>> json_str '{"created_time": "Fri_Aug_08 11:04:40 +0000 2014"}' >>> json_content = json.loads(json_str) >>> json_content["created_time"] 'Fri_Aug_08 11:04:40 +0000 2014'
python json單、雙引號(hào)問(wèn)題
在 python3 里,一個(gè)json是一個(gè)字典,形如 {"a":15}
json轉(zhuǎn)換成字符串的話
那么,如果你要將它轉(zhuǎn)換成字符串,也許你用的是str({"a":15}),這樣轉(zhuǎn)出來(lái)的,可能是是s= "{'a':'15'}",也就是說(shuō),里面的kv是單引號(hào)的。
這個(gè)字符串,傳到其他地方,再用json.loads(s)的時(shí)候會(huì)出錯(cuò),json不支持單引號(hào)。
所以,假如你想把一個(gè)json結(jié)構(gòu),轉(zhuǎn)成字符串,傳遞給遠(yuǎn)處,然后再重新解析成json結(jié)構(gòu),應(yīng)該這樣:
s = json.dumps({"a":15})
然后,把數(shù)據(jù)傳到遠(yuǎn)端,然后再解析回來(lái):
d = json.loads(s)
這樣就不會(huì)出錯(cuò)了。
也支持列表,能一次性傳多個(gè)結(jié)構(gòu)
s = json.dumps([{"a":15}, {"b":20}])
然后,把數(shù)據(jù)傳到遠(yuǎn)端,然后再解析回來(lái):
d = json.loads(s)
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python動(dòng)態(tài)聲明變量賦值代碼實(shí)例
這篇文章主要介紹了Python動(dòng)態(tài)聲明變量賦值代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12Python?Django源碼運(yùn)行過(guò)程解析
這篇文章主要介紹了Python?Django源碼運(yùn)行過(guò)程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08python實(shí)現(xiàn)logistic分類(lèi)算法代碼
今天小編就為大家分享一篇python實(shí)現(xiàn)logistic分類(lèi)算法代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02詳解Python+OpenCV進(jìn)行基礎(chǔ)的圖像操作
OpenCV是一個(gè)用于計(jì)算機(jī)視覺(jué)和圖像操作的免費(fèi)開(kāi)源庫(kù),有數(shù)千種優(yōu)化的算法和函數(shù)用于各種圖像操作。本文將使用OpenCV在Python中進(jìn)行一些圖像操作,感興趣的可以學(xué)習(xí)一下2022-02-02GDAL 矢量屬性數(shù)據(jù)修改方式(python)
這篇文章主要介紹了GDAL 矢量屬性數(shù)據(jù)修改方式(python),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03python之實(shí)現(xiàn)兩個(gè)或多個(gè)列表相加
這篇文章主要介紹了python之實(shí)現(xiàn)兩個(gè)或多個(gè)列表相加方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08python實(shí)現(xiàn)的登錄和操作開(kāi)心網(wǎng)腳本分享
這篇文章主要介紹了python實(shí)現(xiàn)的登錄和操作開(kāi)心網(wǎng)腳本分享,可以登錄開(kāi)心網(wǎng),登錄后發(fā)送信息等功能,需要的朋友可以參考下2014-07-07