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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

JunanP

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

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

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

打赏作者

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

抵扣说明:

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

余额充值