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

你可能感兴趣的:(已解决问题,json)