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微信跳一跳系列之自动计算跳一跳距离
Feb 26 Python
Pandas GroupBy对象 索引与迭代方法
Nov 16 Python
对python中Librosa的mfcc步骤详解
Jan 09 Python
对Python强大的可变参数传递机制详解
Jun 13 Python
pytorch程序异常后删除占用的显存操作
Jan 13 Python
Django接收照片储存文件的实例代码
Mar 07 Python
Window版下在Jupyter中编写TensorFlow的环境搭建
Apr 10 Python
如何基于windows实现python定时爬虫
May 01 Python
浅谈sklearn中predict与predict_proba区别
Jun 28 Python
Python map及filter函数使用方法解析
Aug 06 Python
Python操作word文档插入图片和表格的实例演示
Oct 25 Python
如何利用python正则表达式匹配版本信息
Dec 09 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
web站点获取用户IP的安全方法 HTTP_X_FORWARDED_FOR检验
2013/06/01 PHP
php获取文件名后缀常用方法小结
2015/02/24 PHP
php使用Imagick生成图片的方法
2015/07/31 PHP
php导出csv文件,可导出前导0实例代码
2016/11/16 PHP
php插件Xajax使用方法详解
2017/08/31 PHP
laravel实现登录时监听事件,添加登录用户的记录方法
2019/09/30 PHP
laravel实现按月或天或小时统计mysql数据的方法
2019/10/09 PHP
js 链式延迟执行DOME
2012/01/04 Javascript
javascript工具库代码
2012/03/29 Javascript
event对象获取方法总结在google浏览器下测试
2013/11/03 Javascript
js实现禁止中文输入的方法
2015/01/14 Javascript
跟我学习javascript的定时器
2015/11/19 Javascript
vue移动端裁剪图片结合插件Cropper的使用实例代码
2017/07/10 Javascript
vue+springboot前后端分离实现单点登录跨域问题解决方法
2018/01/30 Javascript
Javascript获取某个月的天数
2018/05/30 Javascript
微信小程序登录换取token的教程
2018/05/31 Javascript
nodejs实现用户登录路由功能
2019/05/22 NodeJs
Vue.js+cube-ui(Scroll组件)实现类似头条效果的横向滚动导航条
2019/06/24 Javascript
vue 封装 Adminlte3组件的实现
2020/03/18 Javascript
vue.js 解决v-model让select默认选中不生效的问题
2020/07/28 Javascript
Python进阶篇之字典操作总结
2016/11/16 Python
Python实现小数转化为百分数的格式化输出方法示例
2017/09/20 Python
Python实现判断字符串中包含某个字符的判断函数示例
2018/01/08 Python
Python实现的多进程和多线程功能示例
2018/05/29 Python
python绘制立方体的方法
2018/07/02 Python
Django restful framework生成API文档过程详解
2020/11/12 Python
前台文员岗位职责及工作流程
2013/11/19 职场文书
创业计划书怎样才能打动风投
2014/01/01 职场文书
社区庆八一活动方案
2014/02/02 职场文书
岗位职责风险防控
2014/02/18 职场文书
关于运动会的口号
2014/06/07 职场文书
机关作风整顿个人剖析材料
2014/10/06 职场文书
客服专员岗位职责
2015/02/10 职场文书
不同意离婚代理词
2015/05/23 职场文书
Redis的字符串是如何实现的
2021/10/24 Redis
MySQL事务的隔离级别详情
2022/07/15 MySQL