zoukankan      html  css  js  c++  java
  • 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"}"

    ~~~

  • 相关阅读:
    redis set
    实现排行榜神器——redis zset
    nginx挂了怎么办
    django 400报错
    项目管理【18】 | 项目进度管理-规划进度管理
    项目管理【17】 | 项目进度管理-进度管理概述
    项目管理【23】 | 项目进度管理-制定进度计划
    移动端开发基础【7】生命周期
    移动端开发案例【7】移动端朋友圈发布显示开发
    移动端开发案例【6】移动端群、用户搜索开发
  • 原文地址:https://www.cnblogs.com/paulwhw/p/12781910.html
Copyright © 2011-2022 走看看