Python中的Json模块详解

Json(JavaScript Object Notation)它是一种轻量级的数据交换格式,具有数据格式简单,读写方便易懂等很多优点。许多主流的编程语言都在用它来进行前后端的数据传输,大大的简化了服务器和客户端的开发工作量。相对于XML来说,更加的轻量级,更方便解析,因此许多开发者都遵循Json格式来进行数据的传输和交换。今天我们详细介绍一下Python在Json的编解码方面的知识。

json的数据格式

在json中,遵循“键值对”的这样一种方式,比如:“{"name":"tom"}”,就是一个json格式的数据,json的格式归纳下来,一般有以下几点:

对象通过键值对表现;

键通过双引号包裹,后面跟冒号“:”,然后跟该键的值;

值可以是字符串、数字、数组等数据类型;

对象与对象之间用逗号隔开;

“{}”用来表达对象;

“[]”用来表达数组;

看一个例子:

{

"name":"中国",

"province":[{

"name":"广东",

"cities":{

"city":["揭阳","惠来"]

}

}]

}

上例则是一个典型的json格式的数据,强大的Python提供了一个“json”模块,可以方便的将各种零散的数据通过模块的内置函数编码形成一个json格式的数据,也可以将一个json格式的数据解码形成自己需要的数据,非常好用,下面我们就来介绍一下

json.dumps()

json模块里的dumps函数是对数据进行编码,形成json格式的数据,我们看一下下面的例子:

import json

data_dict = {"key1": "value1", "key2": "value2", "key3": "value3"}

# 有序转换json字符串

json1 = json.dumps(data_dict, sort_keys=True)

# 默认无序

json2 = json.dumps(data_dict)

print(json1)

print(json2)

通过输出的结果很容易看出,通过dumps方法使字典转换成为了json格式,虽然它们非常相似。其中,在dumps里的参数“sort_keys=True”,使得输出json后对key和value进行0~9、a~z的顺序排序,如果不填,则按照无序排列。有时候,通过排序可以方便地比较json中的数据,因此,适当的排序是很有必要的。

此外,“Indent”参数表示缩进的意思,它可以使得输出的Json看起来更加整齐好看,可读性更强,例如:

import json

data_dict = {"key1": "value1", "key2": "value2", "key3": "value3"}

# 默认无序

json1 = json.dumps(data_dict, indent=4)

print(json1)

'''输出结果

{

"key1": "value1",

"key2": "value2",

"key3": "value3"

}

'''

列举一下dumps()的可填参数:

skipkey:默认为False,当dict对象里的数据不是Python的基本数据类型;(str,unicode,int,long,float,bool,None)时,当skipkey为False,就会报错,如果skipkey为True,则可以跳过这类key;

indent:如果填0或者不填,则按照一行进行打印,否则按照indent的数值显示前面的空格(正整数形式);

separators:分隔符,默认为“(',',':')”,它表示key之间用“,”隔开,key和value之间用“:”隔开;

encoding:编码格式,默认值是UTF-8;

sort_keys:对key、value进行排序,默认值是False,即不排序;

ensure_ascii:默认为True,如果dict对象里含有none-ASCII的字符,则显示\uXX的格式,如果为False,则能正常显示出来;

json.loads()

和dumps相反,loads函数则是将json格式的数据解码,转换为Python字典,我们看一下下面的例子:

import json

data_str = '{"key1": "value1", "key2": "value2", "key3": "value3"}'

# 默认无序

data_dict = json.loads(data_str)

print(data_dict)

"""

{'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}

"""

有时候,输出结果遇到中文的时候,会出现编码格式不一样的情况,显示出为Unicode的编码格式,使得不易读懂,解决办法是添加参数“encoding”参数,即上面的改写成这样:d1 = json.loads(data1,encoding='utf-8')即可。

json.dump()和 json.load()

相对于上面所讲的dumps和loads来说,dump和load函数的功能类似,只不过前者是用来处理字符串类型的,而后者是用于处理文件类型的,如下所示:

import json

data = {'str3':'xyz','str2' :'efgh','str1':'abcd'}

with open(' data. txt', '', encoding='utf-8') as f:

json.dump(data, f, indent=4) # f. write (json.dumps (data, indent=4)) #和上面的效果一样

with open(' data. txt', 'r') as f:

d2 = json.load(f) #d2 = json.loads (f. read())#和上面的效果一样

python中json模块博客园_Python中的Json模块详解相关推荐

  1. python的selenium模块博客园_Python学习--Selenium模块学习(2)

    Selenium的基本操作 获取浏览器驱动寻找方式 1. 通过手动指定浏览器驱动路径 2. 通过 `$PATH`环境变量找寻浏览器驱动 控制浏览器访问URL find系列函数定位元素 - `find_ ...

  2. python中json模块博客园_python的json模块

    python的json模块 什么是序列化和反序列化? 序列化 在分布式环境下,无论是何种数据,都会以二进制序列的形式在网络上传输.序列化是一种将对象以一连串的字节描述的过程,用于解决在对对象流进行读写 ...

  3. python之路 mysql 博客园_Python之路(二十七):Mysql(下)

    本结目录 数据库操作 数据表操作 外键约束 多表查询 索引 事务 python连接Mysql 数据库操作 此操作针对windows环境下 该操作再Mysql服务器启动以及客户端连接之后 对数据库操作之 ...

  4. python实现计算器代码 博客园_python实现计算器

    python实现计算器 1.题目描述 实现一个计算器的控制台程序,支持加减乘除.乘方.括号.小数点,运算符优先级为括号>乘方>乘除>加减,同级别运算按照从左向右的顺序计算 1.1输入 ...

  5. python之路 mysql 博客园_python之路--MySQL数据库初识

    一 . MySQL安装 #下载MySQL地址 https://dev.mysql.com/downloads#要选稳定的,不要选最新的,稳定的就是半年以上没有出现过bug 现在5.6.43为绝大多数使 ...

  6. 初出茅庐的小李第3篇博客《5G物联网及NB-IoT技术详解》读书笔记1

    初出茅庐的小李第3篇博客 <5G物联网及NB-IoT技术详解>读书笔记1 在Mculover666那里白嫖了一本书,不要问我咋白嫖的,我也不知道- 为什么要写这样的笔记? 因为我白嫖的时候 ...

  7. python博客园_python模拟博客园登录-基础版

    mport time import inspect from functools import wraps user_status = {'username': None,'status': Fals ...

  8. python 装饰器写博客园

    需求 1),启动程序,首页面应该显示成如下格式: 欢迎来到博客园首页 1:请登录 2:请注册 3:文章页面 4:日记页面 5:评论页面 6:收藏页面 7:注销 8:退出程序 2),用户输入选项,3~6 ...

  9. python 爬虫 博客园_Python爬虫爬取博客园作业

    分析一下他们的代码,我在浏览器中对应位置右键,然后点击检查元素,可以找到对应部分的代码.但是,直接查看当前网页的源码发现,里面并没有对应的代码.我猜测这里是根据服务器上的数据动态生成的这部分代码,所以 ...

最新文章

  1. 如何选择相机的10大要素!
  2. Hive学习之七《 Sqoop import 从关系数据库抽取到HDFS》
  3. synergy共享ubuntu和windows键鼠
  4. libpcap抓取数据包
  5. linux sock结构体,struct socket结构体详解
  6. 【开源项目】基于FFmpeg的封装格式转换
  7. 经典软件测试技术分类
  8. 关于MOSS列表库新建列表项前的!New标识
  9. 去除序号(正则表达式with sublime text)
  10. js 定时器_Node.js实战6:定时器,使用timer延迟执行
  11. 蓝桥杯2020年第十一届C/C++国赛C组第一题-约数个数
  12. linux解压war包命令改配置文件脚本,自动解压war包,并替换胚子和文件,重启tomcat,实现自动化部署。...
  13. linux系统挂载光盘镜像ISO的方法
  14. Parameterize Method(令函数携带参数)
  15. Java实现家庭收支记账软件
  16. 使用GI Agent(XAG)实现GoldenGate的高可用性(一)
  17. WSDM‘22推荐系统论文梳理
  18. 「案例」如何解决公司采购与财务之间的工作矛盾?
  19. 程序员的江湖:从黑木崖到回龙观
  20. 广州大学MFC实验报告——学生成绩管理系统

热门文章

  1. ASM(active shape models)算法介绍
  2. MFC+OPENCV实现角点检测
  3. 让你的名字在百度排名前列
  4. java日志处理汇总
  5. 当redis执行flush操作后的补救措施
  6. WebViewJavascriptBridge 原理分析
  7. 关键七步,用Apache Spark构建实时分析Dashboard
  8. java加载证书,访问12306的https链接
  9. RabbitMQ官方中文入门教程(PHP版) 第三部分:发布/订阅(Publish/Subscribe)
  10. vim 与系统剪切板