Convert Python Object(From JSON) To Class Object

Convert Python Object(From JSON) To Class Object

根据官方文档:https://www.runoob.com/python/python-json.html,Python操作JSON主要是以下两个函数:

json.dumps	将 Python 对象编码成 JSON 字符串
json.loads	将已编码的 JSON 字符串解码为 Python 对象

问题

假设我们有settings.json的文本文件,内容如下:

{
  "post": {
    "enable": 1,
    "url": "http://localhost:3000/events/179/1"
  },
  "stranger": {
    "skip_frames": 0
  },
  "object": {
    "skip_frames": 0
  }
}

我们可以通过如下方式,将已编码的 JSON 字符串解码为 Python 对象:

# _*_ coding:utf-8 _*_
import os
import json
import time

# 当前文件的路径
basePath = os.path.dirname(__file__)

settings = {}

with open(os.path.join(basePath, 'settings.json'), 'rt') as f:
  settings_json_str = f.read()
  obj = json.loads(settings_json_str)
  f.close()

# 调用方式  
print(obj["object"]["skip_frames"])    

解决

代码如下:

# _*_ coding:utf-8 _*_
import os
import json
import time

# 当前文件的路径
basePath = os.path.dirname(__file__)

settings = {}

# python object 转换为 class 对象,主要为了调用方便
def obj2class(obj):
  try:
    if isinstance(obj, list):
      a = []
      for v in obj:
        b = obj2class(v)
        a.append(b)
      return a
    elif isinstance(obj, dict):
      class_name = "class_{0}".format(uuid.uuid1())
      MyClass = type(class_name, (object,), {})
      a = MyClass()
      for x in obj.items():
        key = x[0]
        value = x[1]
        setattr(a, key, obj2class(value))
      return a
    else:
      return obj
  except Exception:
    pass
  return obj


with open(os.path.join(basePath, 'settings.json'), 'rt') as f:
  settings_json_str = f.read()
  obj = json.loads(settings_json_str)
  settings = obj2class(obj)
  f.close()

# 调用方式 
print(obj.object.skip_frames)
  
    

总结

因为通过obj[‘key’]的方式也可以用,其实并没有解决太多问题,只是多了一种选择,适应个人的书写习惯。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值