对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转换摩斯密码示例
Feb 16 Python
Python字符串、元组、列表、字典互相转换的方法
Jan 23 Python
在Python的Flask框架中构建Web表单的教程
Jun 04 Python
Python中Scrapy爬虫图片处理详解
Nov 29 Python
python实现简易版计算器
Jun 22 Python
python实现抖音视频批量下载
Jun 20 Python
python 调用钉钉机器人的方法
Feb 20 Python
python 字典 setdefault()和get()方法比较详解
Aug 07 Python
tensorflow/core/platform/cpu_feature_guard.cc:140] Your CPU supports instructions that this T
Jun 22 Python
Python可以用来做什么
Nov 23 Python
Python基于Webhook实现github自动化部署
Nov 28 Python
用Python监控你的朋友都在浏览哪些网站?
May 27 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
Smarty模板快速入门
2007/01/04 PHP
谈PHP生成静态页面分析 模板+缓存+写文件
2009/08/17 PHP
zend framework配置操作数据库实例分析
2012/12/06 PHP
php函数间的参数传递(值传递/引用传递)
2013/09/23 PHP
PHP实现根据银行卡号判断银行
2015/04/29 PHP
PHP使用逆波兰式计算工资的方法
2015/07/29 PHP
php获取本机真实IP地址实例代码
2016/03/31 PHP
Laravel框架用户登陆身份验证实现方法详解
2017/09/14 PHP
Yii2框架类自动加载机制实例分析
2018/05/02 PHP
Codeigniter里的无刷新上传的实现代码
2019/04/14 PHP
javascript 实用的文字链提示框效果
2010/06/30 Javascript
JS幻灯片可循环播放可平滑旋转带滚动导航(自写)
2013/08/05 Javascript
JQuery报错Uncaught TypeError: Illegal invocation的处理方法
2015/03/13 Javascript
javascript定义类和类的实现实例详解
2015/12/01 Javascript
JS检测数组类型的方法小结
2017/03/14 Javascript
修改 bootstrap table 默认detailRow样式的实例代码
2017/07/21 Javascript
详解在WebStorm中添加Vue.js单文件组件的高亮及语法支持
2017/10/21 Javascript
Vue.js划分组件的方法
2017/10/29 Javascript
js中的闭包学习心得
2018/02/06 Javascript
JavaScript继承与多继承实例分析
2018/05/26 Javascript
用VueJS写一个Chrome浏览器插件的实现方法
2019/02/27 Javascript
使用taro开发微信小程序遇到的坑总结
2019/04/08 Javascript
详解vue中移动端自适应方案
2019/05/05 Javascript
layui自定义插件citySelect实现省市区三级联动选择
2019/07/26 Javascript
聊聊鉴权那些事(推荐)
2019/08/22 Javascript
sharp.js安装过程中遇到的问题总结
2020/04/02 Javascript
Python判断文件和字符串编码类型的实例
2017/12/21 Python
Python魔法方法功能与用法简介
2019/04/04 Python
Pyqt清空某一个QTreeewidgetItem下的所有分支方法
2019/06/17 Python
Pytorch数据拼接与拆分操作实现图解
2020/04/30 Python
Mountain Warehouse澳大利亚官网:欧洲家庭户外品牌倡导者
2016/11/20 全球购物
优秀毕业生求职信
2014/06/05 职场文书
大学生职业生涯十年规划书范文
2014/09/17 职场文书
政协委员个人总结
2015/03/03 职场文书
生产现场禁烟通知
2015/04/23 职场文书
护士岗位竞聘书
2015/09/15 职场文书