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基础语法定死的,要用的话肯定都是合法的字典,所以这里没有容错性上的区别。

posted @   JunanP  阅读(14)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示