对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 相关文章推荐
使用graphics.py实现2048小游戏
Mar 10 Python
python3实现读取chrome浏览器cookie
Jun 19 Python
Python实现基本数据结构中栈的操作示例
Dec 04 Python
python实现在pandas.DataFrame添加一行
Apr 04 Python
Python3.6基于正则实现的计算器示例【无优化简单注释版】
Jun 14 Python
python 计算一个字符串中所有数字的和实例
Jun 11 Python
python实现从本地摄像头和网络摄像头截取图片功能
Jul 11 Python
python 比较2张图片的相似度的方法示例
Dec 18 Python
Python图像处理库PIL中图像格式转换的实现
Feb 26 Python
Python实现将元组中的元素作为参数传入函数的操作
Jun 05 Python
python 机器学习的标准化、归一化、正则化、离散化和白化
Apr 16 Python
python中requests库+xpath+lxml简单使用
Apr 29 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 中的输出缓冲
2006/12/21 PHP
php简单定时执行任务的实现方法
2015/02/23 PHP
将string解析为json的几种方式小结
2010/11/11 Javascript
Google的跟踪代码 动态加载js代码方法应用
2012/11/12 Javascript
完美解决AJAX跨域问题
2013/11/01 Javascript
JS基于myFocus库实现各种功能的tab选项卡切换效果
2015/09/19 Javascript
js实现滚动条滚动到某个位置便自动定位某个tr
2021/01/20 Javascript
Angularjs---项目搭建图文教程
2016/07/08 Javascript
利用Three.js如何实现阴影效果实例代码
2017/09/26 Javascript
jQuery简单判断值是否存在于数组中的方法示例
2018/04/17 jQuery
JS实现调用本地摄像头功能示例
2018/05/18 Javascript
微信小程序实现多选功能
2018/11/04 Javascript
JS实现简单省市二级联动
2019/11/27 Javascript
Node.js fs模块原理及常见用途
2020/10/22 Javascript
python单线程实现多个定时器示例
2014/03/30 Python
浅谈对yield的初步理解
2017/05/29 Python
python实现发送邮件功能
2017/07/22 Python
scrapy爬虫实例分享
2017/12/28 Python
python3之模块psutil系统性能信息使用
2018/05/30 Python
python 求10个数的平均数实例
2019/12/16 Python
Keras 中Leaky ReLU等高级激活函数的用法
2020/07/05 Python
trivago美国:全球最大的酒店价格比较网站
2018/01/18 全球购物
匈牙利最大的健身制造商和销售商:inSPORTline
2018/10/30 全球购物
理肤泉英国官网:La Roche-Posay英国
2019/01/14 全球购物
P D PAOLA意大利官网:西班牙著名的珠宝首饰品牌
2019/09/24 全球购物
Skyscanner香港:机票比价, 平机票和廉价航空机票预订
2020/02/07 全球购物
自荐信包含哪些内容
2013/10/30 职场文书
销售经理工作职责
2014/02/03 职场文书
贫困证明模板(3篇)
2014/09/16 职场文书
房屋买卖授权委托书
2014/09/27 职场文书
一般纳税人申请报告
2015/05/18 职场文书
2015年挂职锻炼个人总结
2015/10/22 职场文书
《圆明园的毁灭》教学反思
2016/02/16 职场文书
庭外和解协议书
2016/03/23 职场文书
上帝为你开了一扇窗之Tkinter常用函数详解
2021/06/02 Python
如何使用PyCharm及常用配置详解
2021/06/03 Python