对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 相关文章推荐
教你如何在Django 1.6中正确使用 Signal
Jun 22 Python
Python argv用法详解
Jan 08 Python
Python实现的堆排序算法原理与用法实例分析
Nov 22 Python
Python根据当前日期取去年同星期日期
Apr 14 Python
对python中UDP,socket的使用详解
Aug 22 Python
Python3从零开始搭建一个语音对话机器人的实现
Aug 23 Python
使用PyCharm进行远程开发和调试的实现
Nov 04 Python
python 字段拆分详解
Dec 17 Python
PyQt使用QPropertyAnimation开发简单动画
Apr 02 Python
python打开文件的方式有哪些
Jun 29 Python
python两个list[]相加的实现方法
Sep 23 Python
python利用xlsxwriter模块 操作 Excel
Oct 14 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
对Session和Cookie的区分与解释
2007/03/16 PHP
PHP file_get_contents设置超时处理方法
2013/09/30 PHP
ThinkPHP控制器详解
2015/07/27 PHP
MooTools 1.2介绍
2009/09/14 Javascript
JS控制一个DIV层在指定时间内消失的方法
2014/02/17 Javascript
nodejs实现的一个简单聊天室功能分享
2014/12/06 NodeJs
jQuery实现锚点scoll效果实例分析
2015/03/10 Javascript
jQuery切换所有复选框选中状态的方法
2015/07/02 Javascript
jQuery zclip插件实现跨浏览器复制功能
2015/11/02 Javascript
AngularJS验证信息框架的封装插件用法【w5cValidator扩展插件】
2016/11/03 Javascript
bootstrap精简教程_动力节点Java学院整理
2017/07/14 Javascript
jquery animate动画持续运动的实例
2017/11/29 jQuery
vue车牌号校验和银行校验实战
2019/01/23 Javascript
vue项目开启Gzip压缩和性能优化操作
2020/10/26 Javascript
微信小程序实现页面左右滑动
2020/11/16 Javascript
Python Web开发模板引擎优缺点总结
2014/05/06 Python
Django中使用celery完成异步任务的示例代码
2018/01/23 Python
Numpy 改变数组维度的几种方法小结
2018/08/02 Python
Django认证系统实现的web页面实现代码
2019/08/12 Python
python 实现屏幕录制示例
2019/12/23 Python
Python绘制动态水球图过程详解
2020/06/03 Python
Django返回HTML文件的实现方法
2020/09/17 Python
python中reload重载实例用法
2020/12/15 Python
python基于opencv实现人脸识别
2021/01/04 Python
介绍一下代理模式(Proxy)
2014/10/17 面试题
毕业自我评价范文
2013/11/17 职场文书
《颐和园》教学反思
2014/02/26 职场文书
信息技术课后反思
2014/04/27 职场文书
大型营销活动计划书
2014/04/28 职场文书
行政专员岗位职责说明书
2014/09/01 职场文书
水利局群众路线专题民主生活会发言材料
2014/09/21 职场文书
教师党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
个人专业技术总结
2015/03/05 职场文书
同学聚会感言一句话
2015/07/30 职场文书
公司财务管理制度
2015/08/04 职场文书
在Oracle表中进行关键词搜索的过程
2022/06/10 Oracle