对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实现判断一个字符串是否包含子串的方法总结
Nov 21 Python
python http接口自动化脚本详解
Jan 02 Python
python3获取当前文件的上一级目录实例
Apr 26 Python
Jupyter notebook在mac:linux上的配置和远程访问的方法
Jan 14 Python
python dict 相同key 合并value的实例
Jan 21 Python
python调用matlab的m自定义函数方法
Feb 18 Python
python中struct模块之字节型数据的处理方法
Aug 27 Python
python 经典数字滤波实例
Dec 16 Python
python中安装django模块的方法
Mar 12 Python
Python全局变量与global关键字常见错误解决方案
Oct 05 Python
python 第三方库paramiko的常用方式
Feb 20 Python
Python OpenCV超详细讲解读取图像视频和网络摄像头
Apr 02 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
全国FM电台频率大全 - 11 浙江省
2020/03/11 无线电
浅析虚拟主机服务器php fsockopen函数被禁用的解决办法
2013/08/07 PHP
PHP isset empty函数相关面试题及解析
2020/12/11 PHP
jQuery 1.2.x 升? 1.3.x 注意事项
2009/05/06 Javascript
jquery控制listbox中项的移动并排序的实现代码
2010/09/28 Javascript
jquery实现点击TreeView文本父节点展开/折叠子节点
2013/01/10 Javascript
JavaScript的面向对象编程基础
2015/08/13 Javascript
简要了解jQuery移动web开发的响应式布局设计
2015/12/04 Javascript
javascript自动切换焦点控制效果完整实例
2016/02/02 Javascript
基于javascript实现按圆形排列DIV元素(一)
2016/12/02 Javascript
详解JS去重及字符串奇数位小写转大写
2016/12/29 Javascript
详解webpack分离css单独打包
2017/06/21 Javascript
DataTables添加额外的查询参数和删除columns等无用参数实例
2017/07/04 Javascript
Vue.js划分组件的方法
2017/10/29 Javascript
JS+HTML5实现获取手机验证码倒计时按钮
2018/08/08 Javascript
vue自定v-model实现表单数据双向绑定问题
2018/09/03 Javascript
小程序点赞收藏功能的实现代码示例
2018/09/07 Javascript
Angular7.2.7路由使用初体验
2019/03/01 Javascript
uni-app如何实现增量更新功能
2020/01/03 Javascript
vue引用外部JS的两种种方法
2020/01/28 Javascript
[06:15]2016国际邀请赛中国区预选赛单车采访:我顶WINGS
2016/06/27 DOTA
python进程管理工具supervisor使用实例
2014/09/17 Python
Python实现脚本锁功能(同时只能执行一个脚本)
2017/05/10 Python
基于python内置函数与匿名函数详解
2018/01/09 Python
python清除字符串中间空格的实例讲解
2018/05/11 Python
基于python历史天气采集的分析
2019/02/14 Python
opencv与numpy的图像基本操作
2019/03/08 Python
pytorch使用Variable实现线性回归
2019/05/21 Python
如何获取Python简单for循环索引
2019/11/21 Python
详解Django中异步任务之django-celery
2020/11/05 Python
财务会计毕业生个人求职信
2014/02/03 职场文书
护士毕业实习感言
2014/03/05 职场文书
法制宣传教育方案
2014/05/09 职场文书
2016春节慰问信范文
2015/03/25 职场文书
认识实习感想
2015/08/10 职场文书
创业计划书之餐饮
2019/09/02 职场文书