• Python中json.loads()无法解析单引号字符串问题的两种解决方法



    问题描述:

    数据传输过程中数据存入数据库是将json文件默认转为字符串,所以导致从数据库中取出数据是字符串,需要用loads进行转化,但是转化的时候报错:

    json.decoder.JSONDecodeError: Expecting property name enclosed
    
    • 1

    原因分析:

    JSON数据格式里string类型的数据要用双引号’’ ‘’,而不能用单引号’ '。


    解决方案:

    解决方案1:
    在使用json.loads()前,替换字符串中的单引号为双引号

    下面展示一些 内联代码片

    // A code block
    var foo = 'bar';
    
    • 1
    • 2
    // 省略前后代码
    s = s.replace('\'','\"')
    fs = json.loads(s)
    
    • 1
    • 2
    • 3

    解决方案2:
    在使用json.loads()前使用eval()和json.dumps()进行处理

    // 省略前后代码
    fs = json.loads(json.dumps(eval(s))
    
    • 1
    • 2

    解决方法3:
    其实上面的两个方法都是曲线救国,其实之间转为字典类型就可以了,连loads都可以不要

    // 省略前后代码
    fs = eval(s)
    
    • 1
    • 2

    总结:有的时候解决方法不仅仅要求能解决问题,还需要简化问题,不能把问题复杂化,更不能曲线救国,很小的基础反而更容易看出一个人的基本功,有的时候逻辑代码写多了,反而去看底层代码看不懂,希望这种氛围可以改善吧

    基本功解释:
    json.load:表示读取文件,返回python对象
    json.dump:表示写入文件,文件为json字符串格式,无返回
    json.dumps:将python中的字典类型转换为字符串类型,返回json字符串 [dict→str]
    json.loads:将json字符串转换为字典类型,返回python对象 [str→dict]
    load和dump处理的主要是 文件
    loads和dumps处理的是 字符串

    虽然json.loads()无法解析单引号字符串,但是eval()这个内置函数可以将字符串表达式转化为值(很智能),它可以解析单引号字符串。在这里,eval()将字符串{‘id’: ‘cc695906217’, ‘name’: ‘种冲’}转化为字典对象,json.dumps()可将字典对象转化为JSON格式的字符串,然后json.loads()可将JSON格式的字符串解析为字典对象。

  • 相关阅读:
    JS手写章节(1)—手写实现call、apply、bind
    python脚本根据linux内存/CPU情况生成csv文件可描绘数据散点图
    Python 中的类与继承
    (附源码)ssm高考志愿智能选择系统 毕业设计 134565
    竞赛 深度学习YOLO图像视频足球和人体检测 - python opencv
    Python顺序、条件和循环
    哈希表4——快乐数
    AJAX——案例
    【数据挖掘工程师-笔试】2022年大华股份
    springboot整合xxl-job详解(采坑记录)
  • 原文地址:https://blog.csdn.net/xingchenkobe123/article/details/126089343