Python中的json.loads()可能会出现哪些错误?

=Start=

缘由:

最近接手维护同事写的一段代码,大的问题没有,但是小的、隐藏的问题不断,其中一类经常出现的就是json.loads()导致的各种异常。虽然之前我在blog中也整理了不少解析json的文章,但是,这次还是忍不住再做一个整理,为后续自己在用Python做json解析提供一个实际可参考的标准。

正文:

参考解答:
一、常碰到的几种错误类型
二、对应的临时解决办法

&

&

&

三、根本的错误原因
  • 传递给 json.loads() 函数的不是合法的json格式字符串!!!
  • 传递给 json.loads() 函数的不是合法的json格式字符串!!!
  • 传递给 json.loads() 函数的不是合法的json格式字符串!!!

看看合法的json字符串和Python的dict的区别:

json Python-dict
只能用双引号包裹字符串 单引号和双引号都可以包裹字符串
json 可以是这样子[{"name": "x"},{"age": 2}] 在Python中 [{"name": "x"},{"age": 2}]叫列表里面有2个字典的元素
如果Python中的字典中都是用双引号来包裹字符串的,json.loads()才可以解析 但Python可以把json数据直接当成字典或者列表使用
四、引发的一些思考和规范

如果必须要对传入的内容进行解析,且格式较为可控,可以通过常规字符串替换、正则匹配替换将字符串转换成合法的json格式。

&

如果对传入的内容不可控,最合理的做法是将json.loads()操作放入try..catch块,捕获出现的异常,记录无法正确解析的内容。这么做有2方面考虑:

  1. 不因为异常输入导致程序异常(放入try..catch块);
  2. 不因为程序异常导致数据丢失(加入logging机制);

参考链接:

=END=

声明: 除非注明,ixyzero.com文章均为原创,转载请以链接形式标明本文地址,谢谢!
https://ixyzero.com/blog/archives/3923.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注