美文网首页
Python字典转对象之SimpleNamespace

Python字典转对象之SimpleNamespace

作者: 羋学僧 | 来源:发表于2023-10-14 15:49 被阅读0次

Python字典转对象之SimpleNamespace,方便处理JSON数据

  • 在Python里面,要把JSON转成字典是非常容易的,只需要使用json.loads(JSON字符串)就可以了

  • 但如果这个JSON转成的字典,嵌套比较深,那么要读取里面的数据就非常麻烦

{
  "code": 0,
  "data": {
    "datalist": [
      {
        "completed": False,
        "createdTime": "2023-08-23 17:38:30",
        "editor": None,
        "id": 2,
        "layer": "20230823173820",
        "product": "20230823173820",
        "recipeName": "20230823173820",
        "updatedTime": "2023-08-23 17:38:30"
      },
      {
        "completed": False,
        "createdTime": "2023-08-23 14:34:19",
        "editor": None,
        "id": 1,
        "layer": "PDL_ET",
        "product": "049T_HM_PDL_ET",
        "recipeName": "049T_HM_PDL_ET_PDL_ET",
        "updatedTime": "2023-08-23 14:34:19"
      }
    ],
    "total": 2
  },
  "message": None
}

如果我要读取把JSON数据中的layerproduct字段进行拼接,那么用字典的时候,代码要写成这样:

result = info['data']['datalist'][1]['product'] + '_' + info['data']['datalist'][1]['layer']

光是看到这些方括号和单引号,就够让人头晕了

但如果改成下面这样,看起来就清爽多了:

result = info.data.datalist[1].product + '_' + info.data.datalist[1].layer

使用Python自带的SimpleNamespace就可以快速把一个嵌套很深的字典转换为对象。

使用SimpleNamespace可以快速创建一个空对象,并设置它的属性,用法如下:

from types import SimpleNamespace
ins = SimpleNamespace(aa=1, bb=2, cc=3)
print(ins.bb)
2

基于字典创建也非常简单:

from types import SimpleNamespace
data = {'aa': 1, 'bb': 2, 'cc': 3}
ins = SimpleNamespace(**data)
print(ins.bb)

对于深层嵌套的JSON字符串,我们在使用json.loads时,额外设置一个参数:object_hook,就可以实现递归式转换内层字典:

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

关于参数object_hook的具体用法,大家可以看官方文档

相关文章

网友评论

      本文标题:Python字典转对象之SimpleNamespace

      本文链接:https://www.haomeiwen.com/subject/pcezbdtx.html