Python3 JSON编码解码方法详解


Posted in Python onSeptember 06, 2019

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,这些特性使JSON成为理想的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成,在接口数据开发和传输中非常常用。

Python3中我们利用内置模块json解码和编码JSON对象。json模块提供了四个功能:dumps、dump、loads、load

dumps 把数据类型转换成字符串

dump 把数据类型转换成字符串并存储在文件中

loads 把字符串转换成数据类型

load 把文件打开从字符串转换成数据类型

dumps编码

我们利用 dumps 将Python对象编码为 JSON对象 ,当然 dumps 只完成了序列化为str,而 dump 必须传文件描述符,将序列化的str保存到文件中。

编码字典

import json
odata = {'www': 1, 'python': 2, 'Python3': 3}
jdata = json.dumps(odata)
print(jdata)

编码列表示例结果:

{"www": 1, "python": 2, "Python3": 3}
import json
ldata = [100, 'Python2', {'www': 1, 'python': 2, 'Python3': 3}]
jdata = json.dumps(ldata)
print(jdata)

示例结果:

[100, "Python3", {"www": 1, "python": 2, "Python3": 3}]

编码字符串

import json
sdata = 'Python3'
jdata = json.dumps(sdata)
print(jdata)

示例结果:

"Python3"

格式化输出JSON 

将下面的数组,转化为标准的json格式

参数解析:

import json
ldata = ['Python3', 100, {'www': 1, 'python': 2, 'Python3': 3}, True]
jdata = json.dumps(ldata, sort_keys=True, indent=4)
print(jdata)

示例结果:

[
  "Python3",
  100,
  {
    "Python3": 3,
    "python": 2,
    "www": 1
  },
  true
] 

sort_keys=True 那么字典的输出会以键的顺序排序

indent=4 表示缩进为4,如果 indent 是一个非负整数或者字符串,那么 JSON 数组元素和对象成员会被美化输出为该值指定的缩进等级。

转换关系对照表

下面为Python原始类型向JSON对象的转化对照表:

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

loads解码

我们利用 loads 用于解码 JSON对象 。解码结果即与之对应的 Python对象 类型。当然 loads 只完成了反序列化, load 只接收文件描述符,完成读取文件和反序列化。

比如我们用来解码上个示例的数据

import json
jsondata = '''
[
  "Python3",
  100,
  {
    "Python3": 3,
    "python": 2,
    "www": 1
  },
  true
]
'''
ldata = json.loads(jsondata)
print(type(ldata))
print(ldata)

可以看到我们成功对上个例子中的JSON对象进行了解码,并且最终的解码结果为Python列表对象类型,符合Python对象JSON对象对照表的结果。

示例结果:

<class 'list'>
['Python3', 100, {'Python3': 3, 'python': 2, 'www': 1}, True] 

总结

Python3中的json解析和编码模块json使用起来非常简单, 功能也非常齐全,完全能够满足我们日常的需求。

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

Python 相关文章推荐
用python + openpyxl处理excel2007文档思路以及心得
Jul 14 Python
python保存字符串到文件的方法
Jul 01 Python
Python argv用法详解
Jan 08 Python
python3+PyQt5实现使用剪贴板做复制与粘帖示例
Jan 24 Python
Python中functools模块函数解析
Mar 12 Python
用python处理图片之打开\显示\保存图像的方法
May 04 Python
Python获取系统所有进程PID及进程名称的方法示例
May 24 Python
Python3.6.2调用ffmpeg的方法
Jan 10 Python
Python面向对象思想与应用入门教程【类与对象】
Apr 12 Python
完美解决pycharm导入自己写的py文件爆红问题
Feb 12 Python
如何用python写个模板引擎
Jan 14 Python
Django+Celery实现定时任务的示例
Jun 23 Python
PYTHON EVAL的用法及注意事项解析
Sep 06 #Python
Python实现微信机器人的方法
Sep 06 #Python
Linux下通过python获取本机ip方法示例
Sep 06 #Python
django-crontab 定时执行任务方法的实现
Sep 06 #Python
Python使用matplotlib实现交换式图形显示功能示例
Sep 06 #Python
python自动发微信监控报警
Sep 06 #Python
Python使用Slider组件实现调整曲线参数功能示例
Sep 06 #Python
You might like
PHP伪造来源HTTP_REFERER的方法实例详解
2015/07/06 PHP
laravel 去掉index.php伪静态的操作方法
2019/10/12 PHP
jquery 层次选择器siblings与nextAll的区别介绍
2013/08/02 Javascript
Extjs根据条件设置表格某行背景色示例
2014/07/23 Javascript
AngularJS实现表单验证
2015/01/28 Javascript
Jquery插件实现点击获取验证码后60秒内禁止重新获取
2015/03/13 Javascript
JavaScript实现动态添加,删除行的方法实例详解
2015/07/02 Javascript
js随机生成字母数字组合的字符串 随机动画数字
2015/09/02 Javascript
js实现兼容性好的微软官网导航下拉菜单效果
2015/09/07 Javascript
js如何打印object对象
2015/10/16 Javascript
JS原型、原型链深入理解
2016/02/27 Javascript
Vuejs第十三篇之组件——杂项
2016/09/09 Javascript
Node.js中如何合并两个复杂对象详解
2016/12/31 Javascript
详解vue.js移动端导航navigationbar的封装
2017/07/05 Javascript
Javacript中自定义的map.js  的方法
2017/11/26 Javascript
select2 ajax 设置默认值,初始值的方法
2018/08/09 Javascript
vue登录页面cookie的使用及页面跳转代码
2019/07/10 Javascript
[01:47]2018年度DOTA2最佳教练-完美盛典
2018/12/16 DOTA
flask中使用SQLAlchemy进行辅助开发的代码
2013/02/10 Python
Python制作Windows系统服务
2017/03/25 Python
Python快速排序算法实例分析
2017/11/29 Python
Python字典数据对象拆分的简单实现方法
2017/12/05 Python
python爬虫爬取快手视频多线程下载功能
2018/02/28 Python
对pandas replace函数的使用方法小结
2018/05/18 Python
深入浅析python 协程与go协程的区别
2019/05/09 Python
python脚本执行CMD命令并返回结果的例子
2019/08/14 Python
python爬取微博评论的实例讲解
2021/01/15 Python
HOTEL INFO英国:搜索全球酒店
2019/08/08 全球购物
super()与this()的区别
2016/01/17 面试题
机械专业个人求职自荐信格式
2013/09/21 职场文书
医学生毕业自我鉴定
2014/03/26 职场文书
婚前协议书范本
2014/10/27 职场文书
团员年度个人总结
2015/02/26 职场文书
如何理解Vue简单状态管理之store模式
2021/05/15 Vue.js
排查MySQL生产环境索引没有效果
2022/04/11 MySQL
Java服务调用RestTemplate与HttpClient的使用详解
2022/06/21 Java/Android