• 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格式的字符串解析为字典对象。

  • 相关阅读:
    图片突出显示案例html+css+jquery
    Docker基础
    Vue实现未登录跳转到登录页
    2020秋招Java面试题
    【python】Conda强大的包/环境管理工具
    【Mysql系列】mysql中删除数据的几种方法
    广州华锐互动:VR技术应用到工程项目施工安全培训的好处
    什么是NoSQL?随着这次训练就来学习一下
    MVSNet论文笔记
    k8s训练营
  • 原文地址:https://blog.csdn.net/xingchenkobe123/article/details/126089343