对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输出汉字字库及将文字转换为图片的方法
Jun 04 Python
Python将图片转换为字符画的方法
Jun 16 Python
Python面向对象类继承和组合实例分析
May 28 Python
Python实现自定义函数的5种常见形式分析
Jun 16 Python
python使用pdfminer解析pdf文件的方法示例
Dec 20 Python
Python爬虫——爬取豆瓣电影Top250代码实例
Apr 17 Python
Python空间数据处理之GDAL读写遥感图像
Aug 01 Python
python百行代码自制电脑端网速悬浮窗的实现
May 12 Python
keras 自定义loss层+接受输入实例
Jun 28 Python
详解用Python爬虫获取百度企业信用中企业基本信息
Jul 02 Python
Python3 搭建Qt5 环境的方法示例
Jul 16 Python
python爬虫之selenium库的安装及使用教程
May 23 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+mysql实现的二级联动菜单效果详解
2016/05/10 PHP
常用PHP数组排序函数归纳
2016/08/08 PHP
thinkPHP5分页功能实现方法分析
2017/10/25 PHP
PHP中__set()实例用法和基础讲解
2019/07/23 PHP
写的htc的数据表格
2007/01/20 Javascript
IE8 兼容性问题(属性名区分大小写)
2009/06/04 Javascript
AJAX分页的代码(后台asp.net)
2011/02/14 Javascript
Jqgrid设置全选(选择)及获取选择行的值示例代码
2013/12/28 Javascript
jQuery过滤选择器用法分析
2015/02/10 Javascript
JavaScript编程中的Promise使用大全
2015/07/28 Javascript
AngularJS基础 ng-model 指令详解及示例代码
2016/08/02 Javascript
jQuery实现图片轮播效果代码
2016/09/27 Javascript
nodejs redis 发布订阅机制封装实现方法及实例代码
2016/12/15 NodeJs
基于jQuery实现的Ajax 验证用户名唯一性实例代码
2017/06/28 jQuery
基于Vue的ajax公共方法(详解)
2018/01/20 Javascript
详解PHP后期静态绑定分析与应用
2018/03/21 Javascript
使用json-server简单完成CRUD模拟后台数据的方法
2018/07/12 Javascript
JavaScript的级联函数用法简单示例【链式调用】
2019/03/26 Javascript
JS实现马赛克图片效果完整示例
2019/04/13 Javascript
layui禁用侧边导航栏点击事件的解决方法
2019/09/25 Javascript
[01:22:29]真视界:2019年国际邀请赛总决赛
2020/01/29 DOTA
在Mac OS上搭建Python的开发环境
2015/12/24 Python
Python实现获取照片拍摄日期并重命名的方法
2017/09/30 Python
centos 安装python3.6环境并配置虚拟环境的详细教程
2018/02/22 Python
windows10 pycharm下安装pyltp库和加载模型实现语义角色标注的示例代码
2020/05/07 Python
怎样让char类型的东西转换成int类型
2013/12/09 面试题
财务出纳岗位职责
2014/02/03 职场文书
《学会待客》教学反思
2014/02/22 职场文书
应届毕业生自荐信例文
2014/02/26 职场文书
《蜗牛的奖杯》教后反思
2014/04/24 职场文书
2014年作风建设工作总结
2014/10/29 职场文书
影视后期实训报告
2014/11/05 职场文书
党员廉政准则心得体会
2016/01/20 职场文书
2016党员学习作风建设心得体会
2016/01/21 职场文书
高中班主任工作总结(范文)
2019/08/20 职场文书
td 内容自动换行 table表格td设置宽度后文字太多自动换行
2022/12/24 HTML / CSS