对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操作Mysql实例代码教程在线版(查询手册)
Feb 18 Python
使用Python对IP进行转换的一些操作技巧小结
Nov 09 Python
使用django-crontab实现定时任务的示例
Feb 26 Python
Python使用pyodbc访问数据库操作方法详解
Jul 05 Python
利用Python半自动化生成Nessus报告的方法
Mar 19 Python
Python实现微信小程序支付功能
Jul 25 Python
用python3 urllib破解有道翻译反爬虫机制详解
Aug 14 Python
python实现PDF中表格转化为Excel的方法
Jun 16 Python
Python基础教程(一)——Windows搭建开发Python开发环境
Jul 20 Python
Python通过字典映射函数实现switch
Nov 06 Python
Django URL参数Template反向解析
Nov 24 Python
python爬虫利用selenium实现自动翻页爬取某鱼数据的思路详解
Dec 22 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实现图片旋转效果实例代码
2014/10/01 PHP
在页面上点击任一链接时触发一个事件的代码
2007/04/07 Javascript
javascript入门·图片对象(无刷新变换图片)\滚动图像
2007/10/01 Javascript
jQuery结合PHP+MySQL实现二级联动下拉列表[实例]
2011/11/15 Javascript
JS特殊函数(Function()构造函数、函数直接量)区别介绍
2013/05/19 Javascript
JS创建类和对象的两种不同方式
2014/08/08 Javascript
SWFObject基本用法实例分析
2015/07/20 Javascript
JavaScript判断FileUpload控件上传文件类型
2015/09/28 Javascript
js传值后台中文出现乱码的解决方法
2016/06/30 Javascript
AngularJs directive详解及示例代码
2016/09/01 Javascript
JS如何设置iOS中微信浏览器的title
2016/11/22 Javascript
根据Bootstrap Paginator改写的js分页插件
2016/12/25 Javascript
Angular.js中ng-if、ng-show和ng-hide的区别介绍
2017/01/20 Javascript
three.js中文文档学习之创建场景
2017/11/20 Javascript
vuex的简单使用教程
2018/02/02 Javascript
在vue中v-bind使用三目运算符绑定class的实例
2018/09/29 Javascript
使用Angular Cli如何创建Angular私有库详解
2019/01/30 Javascript
解决包含在label标签下的checkbox在ie8及以下版本点击事件无效果兼容的问题
2019/10/27 Javascript
[03:15]DOTA2-DPC中国联赛1月22日Recap集锦
2021/03/11 DOTA
解决win7操作系统Python3.7.1安装后启动提示缺少.dll文件问题
2019/07/15 Python
python支付宝支付示例详解
2019/08/22 Python
Django之form组件自动校验数据实现
2020/01/14 Python
Python带参数的装饰器运行原理解析
2020/06/09 Python
Django中Q查询及Q()对象 F查询及F()对象用法
2020/07/09 Python
HTML5的文档结构和新增标签完全解析
2017/04/21 HTML / CSS
美国环保婴儿用品公司:The Honest Company
2017/11/23 全球购物
网游商务专员求职信
2013/10/15 职场文书
酒店开业策划方案
2014/06/02 职场文书
事业单位工作人员年度考核个人总结
2015/02/12 职场文书
贫民窟的百万富翁观后感
2015/06/09 职场文书
公司员工宿舍管理制度
2015/08/03 职场文书
感恩老师主题班会
2015/08/12 职场文书
2016年教师党员承诺书范文
2016/03/24 职场文书
mybatis使用oracle进行添加数据的方法
2021/04/27 Oracle
Golang中异常处理机制详解
2021/06/08 Golang
nginx中封禁ip和允许内网ip访问的实现示例
2022/03/17 Servers