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


问题描述:

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

json.decoder.JSONDecodeError: Expecting property name enclosed

原因分析:

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


解决方案:

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

下面展示一些 内联代码片

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

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

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

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

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

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

基本功解释:
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格式的字符串解析为字典对象。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柚纸君@blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值