python中json与str转换和出现KeyError的解决方法
- json转str
- str转json
- KeyError的解决方法
json转str
json格式的数据其实就是dict类型的数据,如图所示:
使用json包下的dumps方法把dict类型的数据转化为str类型,如图所示:
从输出的结果可以看出,中文被转换成了ascii码,点开dump函数可以看到有一个参数ensure_ascii默认为True:
将ensure_ascii改为False就可以了:
dump保存数据到文件:
在终端查看保存的文件,发现格式有点乱,不好看
通过jq,可以格式化json数据,并且还会高亮显示,如图所示:
安装jq只需要sudo apt-get install jq
就可以了。
str转json
先打开文件读取数据:
现在获取到的数据就是str类型的,使用loads把它转换成dict类型:
取json格式里的数据就是按照字典的方式:
KeyError的解决方法
当我们取的key在dict中不存在时,就会报KeyError的错误,
你也许会问,我怎么会犯这种错误呢,其实在开发中难免会遇到这种问题,因为当你调用一个接口时,它会根据类型返回不同结构的json数据,你就要避免这种错误,如图:
上图是调用olami接口返回的数据,可以看出,不同的type,它的json结构也是不同的,key也是不同的。
方法一:通过一些共有的key判断
方法二:先测试key是否存在,再操作
方法三:利用dict内置的get(key[,default])
当key存在时,返回key对应的值,当key不存在时返回None,也可以自定义返回值:
方法四:利用dict内置的setdefault(key[,default])
如果key存在,则返回其value;否则插入此key,其value为default,并返回default:
方法五:向类dict增加__missing__()
当key不存在时,会转向__missing__()方法处理,而不触发KeyError:
方法六:利用collections.defaultdict(default_factory)对象
实际上这个是继承自dict,而且实际也是用到的__missing__()方法,其default_factory参数就是向__missing__()方法传递的:
default_factory还可以是某种数据类型,但是不可以为None: