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


json反序列化時只支持雙引號,不支持單引號

今天在跟前端同事聯調的時候發現個很奇怪的問題:明明傳過來的是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']"  # 模擬前端傳來的雙引號套單引號的數據

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]

try:
    err_lst = json.loads(err)
except json.decoder.JSONDecodeError: print("發生異常啦!!!")
    err = replace_comma(err)
    err_lst = json.loads(err)

print(err_lst,type(err_lst))

結果如下:

這樣成功進行了json的反序列化操作。

前端進行Json序列化與反序列化的方法

JSON.parse()

parse()方法用於從一個json格式的字符串中解析出Object對象:

var str='{"name":"whw","age":"18"}' // 經 JSON.parse(str) 得到:
Object : age:"18",
      name:"whw",
      proto_:Object

單引號必須寫在括號外,每個屬性都必須雙引號引起來,否則會拋出異常!!!

JSON.stringify()

stringify()方法用於從一個對象中解析出json字符串。

var obj={a:1,b:2}
//JSON.stringify(obj) 解析后得到
"{"a":"1","b":"2"}"

~~~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM