json.dumps()、json.laods()、demjson相关
这两者在python中,无非就是在字符串和字典之间进行转换。而只不过字符串状态时,满足json的格式。
json.dumps(),将字典转变成json字符串。
a = {"a":123,"b":456}
res = json.dumps(a)
print(type(res),res)
输出结果:
<class 'str'> {"a": 123, "b": 456}
json.loads(),将json字符串变成字典。
b = '{"a":123,"b":456}'
res = json.loads(b)
print(type(res1),res)
输出结果:
<class 'dict'> {'a': 123, 'b': 456}
到这里,json.loads和json.dumps的最根本区别就已经结束了。
目前看起来一切正常,但实际上json.loads这里有很多坑和细节。
比如我把程序写成这样:
b = "{'a':123,'b':456}"
b = "{a:123,b:456}" #这两种写法都不行
res = json.loads(b)
print(type(res1),res)
就会报错。因为在这个字符串中,json的值用的不是双引号。即使是用单引号甚至没有括号的情况,都会无法解析。
这就很麻烦,因为比如有时候爬取网页上的一些信息,得到的json字符串常常不是标准的,有的就没有引号等,如果用json.loads的话,就会很容易解析不出来。
解决方法:
使用demjson
demjson的decode方法,作用也是将json字符串变成字典,但它具有一定程度的容错性。
b1 = "{a:123,b:456}"
b2 = "{'a':123,'b':456}"
res1 = demjson.decode(b1)
print(type(res1),res1)
res2 = demjson.decode(b2)
print(type(res2),res2)
输出结果:
<class 'dict'> {'a': 123, 'b': 456}
<class 'dict'> {'a': 123, 'b': 456}
可以看出,不管有没有引号、引号选何种形式,都可以被解出。当然,这里都只是英文的情况,如果要用中文,可能完全没引号是不行的。
结论:
demjson.decode()与json.loads()功能一致,都是将json字符串转换成字典。但前者容错性更好,使用起来更方便。
另外,demjson.encode()方法则对应着json.dumps()方法,都是将字典转换成json字符串。但因为字典的形式都是python基础语法定死的,要用的话肯定都是合法的字典,所以这里没有容错性上的区别。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了