Python对象转换为json的方法步骤


Posted in Python onApril 25, 2019

Python中内置了json库,用起来超级方便,json现在以成为开发的必备。

python对象到json字符串的转换规则:

Python JSON
dict object
list, tuple array
str, unicode string
int, long, float number
True true
False false
None null

json字符串到python对象的转换规则:

JSON Python
object dict
array list
string unicode
number (int) int, long
number (real) float
true True  
false False
null None

json的api有下面4个:

  • json.loads() 将json转换为dict
  • json.dumps() 将dict转换为json
  • json.load() 将json文件转换为dict
  • json.dump() 将dict转换为json文件 person.json

注意:dict也可以是类对象

dict转换为json

import json

person = {
  'name': 'jack',
  'age': 15,
  'email': 'jack@litets.com'
}


print('dict:', person)

person_json = json.dumps(person) # 转换为json

print('json:', person_json)

输出:

dict: {'name': 'jack', 'age': 15, 'email': 'jack@litets.com'}
json: {"name": "jack", "age": 15, "email": "jack@litets.com"}

json转换为dict

import json
person_dict = json.loads('{"name": "jack", "age": 15, "email": "jack@litets.com"}')

print('person dict:', person_dict)

输出:

person dict: {'name': 'jack', 'age': 15, 'email': 'jack@litets.com'}

类对象转换为json

import json

class Person:

  def __init__(self, name, age, email):
    self.name = name
    self.age = age
    self.email = email


person = Person('tom', 38, 'tom@litets.com')

person_json = json.dumps(person.__dict__)

print('person json:', person_json)

输出:

person json: {"name": "tom", "age": 38, "email": "tom@litets.com"}

json.dumps() 不能直接传递一个对象实例否则回报 TypeError: Object of type Person is not JSON serializable 错误 为了避免这个错误,我们需要修改:

import json
class Person:

  def __init__(self, name, age, email):
    self.name = name
    self.age = age
    self.email = email

# 将person转换为dict
def convert2json(person):
  return {
    'name': person.name,
    'age': person.age,
    'email': person.email
  }

person = Person('tom', 38, 'tom@litets.com')

# 第二个参数传递转换函数,或者使用default=lambda o: o.__dict__
person_json = json.dumps(person, default=convert2json)

print('person json:', person_json)

json转换为类对象

import json

class Person:

  def __init__(self, name, age, email):
    self.name = name
    self.age = age
    self.email = email


def convert2json(dict_json):
  return Person(dict_json['name'], dict_json['age'], dict_json['email'])


person = json.loads('{"name": "tom", "age": 38, "email": "tom@litets.com"}', object_hook=convert2json)

print('person:', person)

输出:

person: <__main__.Person object at 0x10a7230b8>

loads函数只能将json转换为字典,需要我们自己转换为对象。

dict/对象转换为json文件

import 
person = {"name": "tom", "age": 38, "email": "tom@litets.com"}

with open('person.json', 'w') as f:
  json.dump(person, f)

当前目录下会多一个person.json文件,内容是:

{"name": "tom", "age": 38, "email": "tom@litets.com"}

将json文件转换为dict/对象

import json
with open('person.json', 'r') as f:
  print(json.load(f))

输出:

{'name': 'tom', 'age': 38, 'email': 'tom@litets.com'}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python用于url解码和中文解析的小脚本(python url decoder)
Aug 11 Python
Python实现图像几何变换
Jul 06 Python
python结合API实现即时天气信息
Jan 19 Python
Python中的浮点数原理与运算分析
Oct 12 Python
python爬取拉勾网职位数据的方法
Jan 24 Python
PyQt5实现无边框窗口的标题拖动和窗口缩放
Apr 19 Python
python覆盖写入,追加写入的实例
Jun 26 Python
python实现桌面气泡提示功能
Jul 29 Python
Python连接SQLite数据库并进行增册改查操作方法详解
Feb 18 Python
python实现控制台输出彩色字体
Apr 05 Python
python数据分析工具之 matplotlib详解
Apr 09 Python
Django中FilePathField字段的用法
May 21 Python
Python+PyQt5实现美剧爬虫可视工具的方法
Apr 25 #Python
详解用python实现基本的学生管理系统(文件存储版)(python3)
Apr 25 #Python
Python基础教程之if判断,while循环,循环嵌套
Apr 25 #Python
python3通过selenium爬虫获取到dj商品的实例代码
Apr 25 #Python
NumPy 数组使用大全
Apr 25 #Python
Python+OpenCV采集本地摄像头的视频
Apr 25 #Python
python利用selenium进行浏览器爬虫
Apr 25 #Python
You might like
四月新番又没了,《Re:从零开始的异世界生活》第二季延期至7月播出
2020/05/06 日漫
E路文章系统PHP
2006/12/11 PHP
使用TinyButStrong模板引擎来做WEB开发
2007/03/16 PHP
PHP 地址栏信息的获取代码
2009/01/07 PHP
php在项目中寻找代码的坏味道(综艺命名)
2012/07/19 PHP
PHP简单实现欧拉函数Euler功能示例
2017/11/06 PHP
laravel excel 上传文件保存到本地服务器功能
2019/11/14 PHP
JavaScript高级程序设计 读书笔记之十 本地对象Date日期
2012/02/27 Javascript
js截取小数点后几位的写法
2013/11/14 Javascript
jquery中$each()方法的使用指南
2015/04/30 Javascript
使用bootstrap3开发响应式网站
2016/05/12 Javascript
根据Bootstrap Paginator改写的js分页插件
2016/12/25 Javascript
Bootstrap笔记—折叠实例代码
2017/03/13 Javascript
JS实现禁止高频率连续点击的方法【基于ES6语法】
2017/04/25 Javascript
微信小程序封装http访问网络库实例代码
2017/05/24 Javascript
详解Js里的for…in和for…of的用法
2019/03/28 Javascript
jquery中为什么能用$操作
2019/06/18 jQuery
layui中select,radio设置不生效的解决方法
2019/09/05 Javascript
基于form-data请求格式详解
2019/10/29 Javascript
浅谈vue权限管理实现及流程
2020/04/23 Javascript
uniapp微信小程序:key失效的解决方法
2021/01/20 Javascript
Python中的Numeric包和Numarray包使用教程
2015/04/13 Python
在Django框架中设置语言偏好的教程
2015/07/27 Python
解决出现Incorrect integer value: '' for column 'id' at row 1的问题
2017/10/29 Python
python psutil库安装教程
2018/03/19 Python
在Tensorflow中实现梯度下降法更新参数值
2020/01/23 Python
13个Pandas实用技巧,助你提高开发效率
2020/08/19 Python
CSS3过渡transition效果实例介绍
2016/05/03 HTML / CSS
经济管理专业自荐信
2013/12/30 职场文书
会计学专业求职信
2014/07/17 职场文书
私营公司诉讼代理委托书范本
2014/09/13 职场文书
在宿舍喝酒的检讨书
2014/09/28 职场文书
2014年学生资助工作总结
2014/12/18 职场文书
酒店财务经理岗位职责
2015/04/08 职场文书
pytorch 中nn.Dropout的使用说明
2021/05/20 Python
Redis基本数据类型Zset有序集合常用操作
2022/06/01 Redis