栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

json.dumps()与json.laods()的根本区别以及demjson相关扩展

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

json.dumps()与json.laods()的根本区别以及demjson相关扩展

        这两者在python中,无非就是在字符串和字典之间进行转换。而只不过字符串状态时,满足json的格式。

json.dumps(),将字典转变成json字符串。

a = {"a":123,"b":456}

res = json.dumps(a)

print(type(res),res)

输出结果:

{"a": 123, "b": 456}

json.loads(),将json字符串变成字典。

b = '{"a":123,"b":456}'

res = json.loads(b)

print(type(res1),res)

输出结果:

{'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)

输出结果:

{'a': 123, 'b': 456}

{'a': 123, 'b': 456}

        可以看出,不管有没有引号、引号选何种形式,都可以被解出。当然,这里都只是英文的情况,如果要用中文,可能完全没引号是不行的。

结论:

        demjson.decode()与json.loads()功能一致,都是将json字符串转换成字典。但前者容错性更好,使用起来更方便。

        另外,demjson.encode()方法则对应着json.dumps()方法,都是将字典转换成json字符串。但因为字典的形式都是python基础语法定死的,要用的话肯定都是合法的字典,所以这里没有容错性上的区别。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/286850.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号