python开发中如何将JSON快速转成对象?

2023-10-0318:23:11编程语言入门到精通Comments1,506 views字数 953阅读模式

 Python 里面,要把 JSON 转成字典是非常容易的,只需要使用json.loads(JSON字符串)就可以了。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/56424.html

但如果这个 JSON 转成的字典,嵌套比较深,那么要读取里面的数据就非常麻烦了。如下图所示:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/56424.html

python开发中如何将JSON快速转成对象?

如果我要读取把图中的end减去start字段,那么用字典的时候,代码要写成这样:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/56424.html

result = info['data'][0]['entities']['annotations'][0]['end'] - info['data'][0]['entities']['annotations'][0]['start']

光是看到这些方括号和单引号,就够让人头晕了。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/56424.html

但如果改成下面这样,看起来就清爽多了:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/56424.html

result = info.data[0].entities.annotations[0].end - info.data[0].entities.annotations[0].start

那么如何快速把一个嵌套很深的字典转换为对象呢?其实非常简单,使用 Python 自带的SimpleNamespace就可以了。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/56424.html

使用SimpleNamespace可以快速创建一个空对象,并设置它的属性,用法如下:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/56424.html

from types import SimpleNamespace

ins = SimpleNamespace(aa=1, bb=2, cc=3)

print(ins.bb)

运行效果如下图所示:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/56424.html

python开发中如何将JSON快速转成对象?

基于字典创建也非常简单:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/56424.html

from types import SimpleNamespace


data = {'aa': 1, 'bb': 2, 'cc': 3}
ins = SimpleNamespace(**data)

print(ins.bb)

python开发中如何将JSON快速转成对象?对于深层嵌套的 JSON 字符串,我们在使用json.loads时,额外设置一个参数:object_hook,就可以实现递归式转换内层字典:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/56424.html

x = json.loads(JSON字符串, object_hook=lambda d: SimpleNamespace(**d))

如下图所示:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/56424.html

python开发中如何将JSON快速转成对象?

关于参数object_hook的具体用法,大家可以看官方文档[1]文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/56424.html

参考资料

[1]官方文档: https://docs.python.org/3/library/json.html#json.loads文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/56424.html
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/56424.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/ymba/56424.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定