对python中Json与object转化的方法详解


Posted in Python onDecember 31, 2018

python提供了json包来进行json处理,json与python中数据类型对应关系如下:

对python中Json与object转化的方法详解

一个python object无法直接与json转化,只能先将对象转化成dictionary,再转化成json;对json,也只能先转换成dictionary,再转化成object,通过实践,源码如下:

import json

class user:
  def __init__(self, name, pwd):
    self.name = name
    self.pwd = pwd

  def __str__(self):
    return 'user(' + self.name + ',' + self.pwd + ')'

#重写JSONEncoder的default方法,object转换成dict
class userEncoder(json.JSONEncoder):
  def default(self, o):
    if isinstance(o, user):
      return {
        'name': o.name,
        'pwd': o.pwd
      }
    return json.JSONEncoder.default(o)

#重写JSONDecoder的decode方法,dict转换成object
class userDecode(json.JSONDecoder):
  def decode(self, s):
    dic = super().decode(s)
    return user(dic['name'], dic['pwd'])

#重写JSONDecoder的__init__方法,dict转换成object
class userDecode2(json.JSONDecoder):
  def __init__(self):
    json.JSONDecoder.__init__(self, object_hook=dic2objhook)


# 对象转换成dict
def obj2dict(obj):

  if (isinstance(obj, user)):
    return {
      'name': obj.name,
      'pwd': obj.pwd
    }
  else:
    return obj

# dict转换为对象
def dic2objhook(dic):

  if isinstance(dic, dict):
    return user(dic['name'], dic['pwd'])
  return dic

# 第一种方式,直接把对象先转换成dict
u = user('smith', '123456')
uobj = json.dumps(obj2dict(u))
print('uobj: ', uobj)


#第二种方式,利用json.dumps的关键字参数default
u = user('smith', '123456')
uobj2 = json.dumps(u, default=obj2dict)
print('uobj2: ', uobj)

#第三种方式,定义json的encode和decode子类,使用json.dumps的cls默认参数
user_encode_str = json.dumps(u, cls=userEncoder)
print('user2json: ', user_encode_str)

#json转换为object
u2 = json.loads(user_encode_str, cls=userDecode)
print('json2user: ', u2)

#另一种json转换成object的方式
u3 = json.loads(user_encode_str, cls=userDecode2)
print('json2user2: ', u3)

输出结果如下:

C:\python\python.exe C:/Users/Administrator/PycharmProjects/pytest/com/guo/myjson.py
uobj: {"name": "smith", "pwd": "123456"}
uobj2: {"name": "smith", "pwd": "123456"}
user2json: {"name": "smith", "pwd": "123456"}
json2user: user(smith,123456)
json2user2: user(smith,123456)

Process finished with exit code 0

以上这篇对python中Json与object转化的方法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中的yield浅析
Jun 16 Python
简单谈谈python中的多进程
Nov 06 Python
浅谈Python使用Bottle来提供一个简单的web服务
Dec 27 Python
TensorFlow中权重的随机初始化的方法
Feb 11 Python
python队列Queue的详解
May 10 Python
解决python xx.py文件点击完之后一闪而过的问题
Jun 24 Python
python中通过selenium简单操作及元素定位知识点总结
Sep 10 Python
Python&&GDAL实现NDVI的计算方式
Jan 09 Python
python模拟哔哩哔哩滑块登入验证的实现
Apr 24 Python
如何用用Python将地址标记在地图上
Feb 07 Python
python gui开发——制作抖音无水印视频下载工具(附源码)
Feb 07 Python
python基础之模块的导入
Oct 24 Python
python使用zip将list转为json的方法
Dec 31 #Python
python 获取utc时间转化为本地时间的方法
Dec 31 #Python
python 实现UTC时间加减的方法
Dec 31 #Python
Python从单元素字典中获取key和value的实例
Dec 31 #Python
对Python 两大环境管理神器 pyenv 和 virtualenv详解
Dec 31 #Python
python 实现得到当前时间偏移day天后的日期方法
Dec 31 #Python
利用python修改json文件的value方法
Dec 31 #Python
You might like
PHP 事务处理数据实现代码
2010/05/13 PHP
PHP内存缓存Memcached类实例
2014/12/08 PHP
windows中为php安装mongodb与memcache
2015/01/06 PHP
微信公众平台开发教程⑥ 微信开发集成类的使用图文详解
2019/04/10 PHP
纯JavaScript实现的完美渐变弹出层效果代码
2010/04/02 Javascript
jQuery bind事件使用详解
2011/05/05 Javascript
JS子父窗口互相操作取值赋值的方法介绍
2013/05/11 Javascript
js加载读取内容及显示与隐藏div示例
2014/02/13 Javascript
JavaScript的21条基本知识点
2014/03/04 Javascript
javascript判断chrome浏览器的方法
2014/03/26 Javascript
jQuery Ajax实现跨域请求
2017/01/21 Javascript
BootStrap与Select2使用小结
2017/02/17 Javascript
详解数组Array.sort()排序的方法
2020/05/09 Javascript
js实现网页定位导航功能
2017/03/07 Javascript
Vue路由跳转问题记录详解
2017/06/15 Javascript
JavaSctit 利用FileReader和滤镜上传图片预览功能
2017/09/05 Javascript
浅谈vuex actions和mutation的异曲同工
2018/12/13 Javascript
vue实现分页栏效果
2019/06/28 Javascript
JavaScript JSON数据处理全集(小结)
2019/08/15 Javascript
微信小程序 flexbox layout快速实现基本布局的解决方案
2020/03/24 Javascript
在vue中使用防抖函数组件操作
2020/07/26 Javascript
原生JS实现拖拽功能
2020/12/16 Javascript
Python中with及contextlib的用法详解
2017/06/08 Python
Python中import机制详解
2017/11/14 Python
python之文件读取一行一行的方法
2018/07/12 Python
对django xadmin自定义菜单的实例详解
2019/01/03 Python
python实现全盘扫描搜索功能的方法
2019/02/14 Python
python实现列表的排序方法分享
2019/07/01 Python
python实现拉普拉斯特征图降维示例
2019/11/25 Python
初婚未育未抱养证明
2014/01/12 职场文书
医院检讨书范文
2014/02/01 职场文书
市级优秀班主任事迹材料
2014/05/13 职场文书
学校领导班子四风问题整改意见
2014/10/02 职场文书
保证书格式
2015/01/16 职场文书
索赔员岗位职责
2015/02/15 职场文书
MySQL 使用自定义变量进行查询优化
2021/05/14 MySQL