对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中实现一个高性能计数器(Counter)实例
Jul 09 Python
用Pygal绘制直方图代码示例
Dec 07 Python
Python3.6简单反射操作示例
Jun 14 Python
对Tensorflow中的变量初始化函数详解
Jul 27 Python
Python 创建新文件时避免覆盖已有的同名文件的解决方法
Nov 16 Python
python读取各种文件数据方法解析
Dec 29 Python
Python实现操纵控制windows注册表的方法分析
May 24 Python
Django模型修改及数据迁移实现解析
Aug 01 Python
使用pyhon绘图比较两个手机屏幕大小(实例代码)
Jan 03 Python
Jupyter notebook无法导入第三方模块的解决方式
Apr 15 Python
Python导入数值型Excel数据并生成矩阵操作
Jun 09 Python
Python自动化工具之实现Excel转Markdown表格
Apr 08 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函数file_get_contents超时处理的方法详解
2013/06/03 PHP
PHP将字符分解为多个字符串的方法
2014/11/22 PHP
php购物车实现方法
2015/01/03 PHP
php实现的mongodb操作类实例
2015/04/03 PHP
编写PHP脚本使WordPress的主题支持Widget侧边栏
2015/12/14 PHP
PHP从二维数组得到N层分类树的实现代码
2016/10/11 PHP
PDO::lastInsertId讲解
2019/01/29 PHP
js判断是否为数组的函数: isArray()
2011/10/30 Javascript
在WordPress中加入Google搜索功能的简单步骤讲解
2016/01/04 Javascript
js和jquery实现监听键盘事件示例代码
2020/06/24 Javascript
基于jQuery实现带动画效果超炫酷的弹出对话框(附源码下载)
2016/02/22 Javascript
jQuery Ajax和getJSON获取后台普通json数据和层级json数据用法分析
2016/06/08 Javascript
Highcharts学习之坐标轴
2016/08/02 Javascript
基于JavaScript实现鼠标箭头移动图片跟着移动
2016/08/30 Javascript
ztree实现左边动态生成树右边为内容详情功能
2017/11/03 Javascript
react-router4 配合webpack require.ensure 实现异步加载的示例
2018/01/18 Javascript
基于Vue-cli快速搭建项目的完整步骤
2018/11/03 Javascript
JS实现选项卡效果的代码实例
2019/05/20 Javascript
vue 集成 vis-network 实现网络拓扑图的方法
2019/08/07 Javascript
前端深入理解Typescript泛型概念
2020/03/09 Javascript
详解实现vue的数据响应式原理
2021/01/20 Vue.js
[02:57]2014DOTA2国际邀请赛 选手辛苦解说更辛苦
2014/07/10 DOTA
从零学Python之入门(五)缩进和选择
2014/05/27 Python
在Linux系统上通过uWSGI配置Nginx+Python环境的教程
2015/12/25 Python
利用python实现简单的循环购物车功能示例代码
2017/07/05 Python
python通过nmap扫描在线设备并尝试AAA登录(实例代码)
2019/12/30 Python
python如何查看网页代码
2020/06/07 Python
python开发前景如何
2020/06/11 Python
IE下实现类似CSS3 text-shadow文字阴影的几种方法
2011/05/11 HTML / CSS
什么是URL
2015/12/13 面试题
出国考察邀请函
2014/01/21 职场文书
数控技校生自我鉴定
2014/03/02 职场文书
云南省召开党的群众路线教育实践活动总结会议新闻稿
2014/10/21 职场文书
整改落实自查报告
2014/11/05 职场文书
任命书格式范文
2015/09/22 职场文书
大学生暑期社会实践的个人总结!
2019/07/17 职场文书