对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 正则式使用心得
May 07 Python
python smtplib模块发送SSL/TLS安全邮件实例
Apr 08 Python
Python数字图像处理之霍夫线变换实现详解
Jan 12 Python
python实现PID算法及测试的例子
Aug 08 Python
PyTorch中Tensor的拼接与拆分的实现
Aug 18 Python
python连接、操作mongodb数据库的方法实例详解
Sep 11 Python
PHP统计代码行数的小代码
Sep 19 Python
windows环境中利用celery实现简单任务队列过程解析
Nov 29 Python
python隐藏类中属性的3种实现方法
Dec 19 Python
Python OrderedDict字典排序方法详解
May 21 Python
Django xadmin安装及使用详解
Oct 26 Python
OpenCV实现常见的四种图像几何变换
Apr 01 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 获得汉字拼音首字母的函数
2009/08/01 PHP
PHP+MySQL实现无极限分类栏目的方法
2015/12/23 PHP
PHP实现模拟http请求的方法分析
2017/12/20 PHP
PHP生成随机数的方法总结
2018/03/01 PHP
Laravel基础_关于view共享数据的示例讲解
2019/10/14 PHP
ExtJs使用IFrame的实现代码
2010/03/24 Javascript
JSDoc 介绍使用规范JsDoc的使用介绍
2011/02/12 Javascript
二叉树先序遍历的非递归算法具体实现
2014/01/09 Javascript
浅析JS中document对象的一些重要属性
2014/03/06 Javascript
jQuery性能优化技巧分析
2015/02/20 Javascript
JQuery标签页效果实例详解
2015/12/24 Javascript
详解WordPress开发中get_current_screen()函数的使用
2016/01/11 Javascript
使用 stylelint检查CSS_StyleLint
2016/04/28 Javascript
vue-prop父组件向子组件进行传值的方法
2018/03/01 Javascript
Angular网络请求的封装方法
2018/05/22 Javascript
详解js 创建对象的几种方法
2019/03/08 Javascript
浅析vue-router中params和query的区别
2019/12/24 Javascript
[03:14]DOTA2斧王 英雄基础教程
2013/11/26 DOTA
[01:14:12]2018DOTA2亚洲邀请赛4.7 总决赛 LGD vs Mineski 第二场
2018/04/09 DOTA
详解python基础之while循环及if判断
2017/08/24 Python
Python实现UDP程序通信过程图解
2020/05/15 Python
浅谈numpy中np.array()与np.asarray的区别以及.tolist
2020/06/03 Python
意大利奢侈品网站:Italist
2016/08/23 全球购物
英国文胸专家:AmpleBosom.com
2018/02/06 全球购物
说一下mysql, oracle等常见数据库的分页实现方案
2012/09/29 面试题
人事专员岗位职责
2013/11/20 职场文书
生物科学系大学生的自我评价
2013/12/20 职场文书
计算机网络专业求职信
2014/06/05 职场文书
运动会宣传口号
2014/06/09 职场文书
班子成员四风问题自我剖析材料
2014/09/29 职场文书
小学运动会报道稿
2014/10/04 职场文书
当幸福来敲门观后感
2015/06/01 职场文书
火烧圆明园的观后感
2015/06/03 职场文书
Nginx的rewrite模块详解
2021/03/31 Servers
Python 文本滚动播放器的实现代码
2021/04/25 Python
使用pandas生成/读取csv文件的方法实例
2021/07/09 Python