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使用saltstack生成服务器资产清单
Mar 01 Python
Python爬虫:通过关键字爬取百度图片
Feb 17 Python
Python实现的科学计算器功能示例
Aug 04 Python
如何高效使用Python字典的方法详解
Aug 31 Python
python pandas 组内排序、单组排序、标号的实例
Apr 12 Python
PyQt实现界面翻转切换效果
Apr 20 Python
python selenium 弹出框处理的实现
Feb 26 Python
python 根据字典的键值进行排序的方法
Jul 24 Python
python用requests实现http请求代码实例
Oct 31 Python
python中for循环变量作用域及用法详解
Nov 05 Python
Tensorflow训练MNIST手写数字识别模型
Feb 13 Python
python爬虫实现POST request payload形式的请求
Apr 30 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
Yii数据模型中rules类验证器用法分析
2016/07/15 PHP
PHP 7安装使用体验之性能大提升,兼容性强,扩展支持不够(升级PHP要谨慎)
2017/07/27 PHP
PHP超级全局变量【$GLOBALS,$_SERVER,$_REQUEST等】用法实例分析
2019/12/11 PHP
判断脚本加载是否完成的方法
2009/05/26 Javascript
JQery jstree 大数据量问题解决方法
2010/03/09 Javascript
jQuery Validation实例代码 让验证变得如此容易
2010/10/18 Javascript
EXTJS记事本 当CompositeField遇上RowEditor
2011/07/31 Javascript
页面调用单个swf文件,嵌套出多个方法。
2011/11/21 Javascript
js常用数组操作方法简明总结
2014/06/20 Javascript
浅谈javascript中this在事件中的应用
2015/02/15 Javascript
js获取当前日期前七天的方法
2015/02/28 Javascript
基于jquery实现简单的手风琴特效
2015/11/24 Javascript
原生js的RSA和AES加密解密算法
2016/10/08 Javascript
bootstrap为水平排列的表单和内联表单设置可选的图标
2017/02/15 Javascript
Nodejs中使用phantom将html转为pdf或图片格式的方法
2017/09/18 NodeJs
jquery自定义显示消息数量
2017/12/19 jQuery
微信小程序websocket实现聊天功能
2020/03/30 Javascript
详解vue中axios请求的封装
2019/04/08 Javascript
详解vue2.0模拟后台json数据
2019/05/16 Javascript
element-ui 中使用upload多文件上传只请求一次接口
2019/07/19 Javascript
Vue组件通信入门之Provide和Inject机制
2019/12/29 Javascript
python计算程序开始到程序结束的运行时间和程序运行的CPU时间
2013/11/28 Python
Python列表list数组array用法实例解析
2014/10/28 Python
简单易懂的python环境安装教程
2017/07/13 Python
简单了解什么是神经网络
2017/12/23 Python
基于python实现高速视频传输程序
2019/05/05 Python
详解Python的循环结构知识点
2019/05/20 Python
使用python的pandas为你的股票绘制趋势图
2019/06/26 Python
Python random模块制作简易的四位数验证码
2020/02/01 Python
对Matlab中共轭、转置和共轭装置的区别说明
2020/05/11 Python
python中线程和进程有何区别
2020/06/17 Python
html5 canvas 画图教程案例分析
2012/11/23 HTML / CSS
html5 canvas-1.canvas介绍(hello canvas)
2013/01/07 HTML / CSS
美国购买体育、音乐会和剧院门票网站:SelectATicket
2019/09/08 全球购物
环境保护标语
2014/06/20 职场文书
体育课外活动总结
2014/07/08 职场文书