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的反序列化操作。
相关推荐
懒人的小窝 2020-06-14
84593973 2020-06-05
liushun 2020-05-26
luckymaoyy 2020-01-29
tvk 2020-01-28
酷云的csdn 2020-01-10
hanshangzhi 2020-01-07
thekenofDIS 2013-09-20
李高峰 2019-11-05
Mr欢先生 2014-07-08
linuxwcj 2019-07-11
pixel 2019-03-20
青松 2019-04-23
maoyongfan 2019-08-23
huha 2017-05-09
刘涛 2011-07-17
hanjinping 2011-06-04
JavaLab 2011-05-02
雪糕 2010-05-21