python 自称 "Batteries included"(自带电池, 自备干粮?), 就是因为他提供了很多内置的模块, 使用这些模块无需安装和配置即可使用.

本章主要介绍 python 的一些内置常用核心模块

Python 常用的核心模块

三、json模块

json模块用于使用JSON序列化和反序列化对象.

JSON是JavaScript Object Notation的简写, 也叫 JavaScript 对象符号.

3.1 json语法格式

JSON 是一种轻量级的数据交换格式, 起源于JavaScript 的对象字面量形式, 但是严格上来说 JSON 并不能看成是JavaScript 对象的子集.

JSON 中主要有两种数据类型:json 对象{}和 json 数组[].


json 对象

用大括号{}括起来, 大括号中是key:value形式的数据, 不同的键值对用,分开.

类似于我们 python 中的字典(dict).

下面就是一个 json 对象.

{
"name": "lisi",
"age" : 20
}

注意:

  1. 键和值中, 如果是字符串则一定要用双引号括起来.(单引号也可以, 但是双引号在各个平台和编程语言中兼容性更好)
  2. 如果是整数, 则不需要使用双引号.
  3. key一般使用字符串, value可以是任意类型(字符串, json 数组, json 对象都可以).

json数组

使用[]括起来, 存储的数据可以是字符串, 数字, 和 json 对象.

类似于我们 python 中的列表(list)

**

下面就是一个json数组**

[
{
"name":"lisi", # name --> 用户名
"age" : 20 # age ---> 用户使用年限 },
{
"name" : "zs",
"age" : 30
}
]

json数组中可以存储字符串类型

["a", "b", "c"]

3.2 json模块基本使用

对 json 一般有两种操作:序列化(编码)和反序列化(解码).

序列化是指, 把 python 对象转变成 json 格式的数据, 并保存.

反序列化是指, 把 json 格式的数据转变成 python 对象.


json 数据类型和 python 数据类型对应关系

注意:

括号中的类型表示可以把 python 中的类型转换成 JSON 类型, 但是不能从 JSON 类型转换成 python 类型

JSON 类型 python 类型
object dict
array list(tuple)
string unicode(str, bytes)
number int, float
true True
false False
null None

说明:

对于字符串数据, 应该假设使用的是 Unicode 字符串. 如果在编码时遇到字节字符串, 则默认使用utf-8将其解码为 Unicode 的字符串. 解码是, JSON 字符串总是以 Unicode 的形式返回.


序列化操作1:json.dump(obj, f, **opts)

obj序列化到文件对象f中.

opts表示关键字参数的集合(多个关键字参数),可以通过这些参数来控制序列化的流程, 这些关键字参数都是可选的.

import json

d = {
"name": "zs",
"age": 30,
"girls": ["志玲", "凤姐"]
}
json.dump(d, open("data.json", mode="w+"))


关键字参数说明
关键字参数 说明
skipkeys 布尔标志.当字典的key不是基本类型(str, int, float, bool, None)时的处理方式. True就跳过这个key-value, False(默认值)就抛一个异常TypeError
ensure_ascii 布尔标志. 如果是True(默认值), 则会把所有的非ascii字符进行转义处理, 如果是False则会把所有字符原样输出.要保证你的文件支持非ascii字符
check_circle 布尔标志. 确定检测容器的循环引用. 默认值是True, 如果设置为False, 则不检测, 一旦出现了循环引用则会抛出异常OverflowEerror, 或者更糟
allow_nan 布尔标志. 确定是否序列化范围外的浮点数.(nan, inf, -inf). 默认值是True. 如果是False, 则当序列化的值中有上面的值是会抛出异常ValueError
indent 一个非负整数. 表示在打印数组和对象的时候的缩进量(空格的个数). 默认是None, 表示没有缩进, 用最紧凑的方式显示. 如果是0或负数或""则只换行,不缩进. 如果是个字符串, 则用这个字符串来缩进. 比如用:\t
separators 一个元组.(item_separator, key_separator), item_separator是指的数组元素之间的分隔符, key_separator是指的key 与 value之间的分隔符. 默认是:(",", ":"). 永远不要更改默认值
default 一个函数. 如果某个value是 json 不支持的类型, 则使用这个函数的返回值来替换value. python 会把那个不支持的类型的数据作为参数传递到这个函数中.
sort_key 布尔值. 表示是否对字典的key进行排序.默认值False
#!/usr/bin/env python3
# -*- coding: utf-8 -*- import json d = {
"name": "zs",
"age": 30,
"girls": ["志玲", "凤姐"],
"a": float("1"),
"b": lambda : 2
}
json.dump(d, open("data.json", mode="w+", encoding="utf-8"),
ensure_ascii=False,
allow_nan=True,
indent=2,
separators=(",", ":"),
default=lambda a: "abc",
sort_keys=True)
print(int("1"))


序列化操作2:json.dumps(obj, **opts)

json.dump()类似, 只是这个函数是把序列化后的字符串以返回值的形式返回了.


反序列化操作1:json.load(f, **opts)

从文件反序列化JSON.

f文件对象.

opts表示关键字参数的集合(多个关键字参数),可以通过这些参数来控制反序列化的流程, 这些关键字参数都是可选的.

import json

with open("data.json", mode="r+", encoding="utf-8") as f:
obj = json.load(f)
print(obj)

关键字参数说明
关键字参数 说明
object_hook 一个函数. 解析JSON 对象的时候调用的函数. 默认使用dict()
parse_float 一个函数. 解析浮点数的时候使用. 默认使用float()
parse_int 一个函数. 解析整数的时候使用. 默认使用int()
parse_constant 一个函数. 解析常数的时候使用. 像-Infinity, Infinity, NaN, true, false

反序列化操作2:json.loads(s, **opts)

json.load(f, **opts)类似, 只是这个函数是从JSON 格式的字符串中反序列化数据.

Python第十一章-常用的核心模块03-json模块的更多相关文章

  1. Python第十一章-常用的核心模块01-collections模块

    python 自称 "Batteries included"(自带电池, 自备干粮?), 就是因为他提供了很多内置的模块, 使用这些模块无需安装和配置即可使用. 本章主要介绍 py ...

  2. Python第十一章-常用的核心模块04-datetime模块

    python 自称 "Batteries included"(自带电池, 自备干粮?), 就是因为他提供了很多内置的模块, 使用这些模块无需安装和配置即可使用. 本章主要介绍 py ...

  3. Python开发之序列化与反序列化:pickle、json模块使用详解

    1 引言 在日常开发中,所有的对象都是存储在内存当中,尤其是像python这样的坚持一切接对象的高级程序设计语言,一旦关机,在写在内存中的数据都将不复存在.另一方面,存储在内存够中的对象由于编程语言. ...

  4. Python之路(第十五篇)sys模块、json模块、pickle模块、shelve模块

    一.sys模块 1.sys.argv 命令行参数List,第一个元素是程序本身路径 2.sys.exit(n) 退出程序,正常退出时exit(0) 3.sys.version . sys.maxint ...

  5. Python 入门之 内置模块 -- 序列化模块(json模块、pickle模块)

    Python 入门之 内置模块 -- 序列化模块(json模块.pickle模块) 1.序列化 Python中这种序列化模块有三种: ​ json模块 : ​ 不同语言都遵循的一种数据转化格式,即不同 ...

  6. Python模块03/re模块

    Python模块03/re模块 内容大纲 re模块(正则表达式) 1.re模块(正则表达式) import re s = "meet_宝元_meet" print(re.finda ...

  7. os模块、sys模块、json模块、pickle模块、logging模块

    目录 os模块 sys模块 json模块 pickle模块 logging模块 os模块 功能:与操作系统交互,可以操作文件 一.对文件操作 判断是否为文件 os.path.isfile(r'路径') ...

  8. Python常用模块之json模块

    常用模块: 一个Python文件就是一个模块 import xxx 1. 标准模块,Python自带的,如time/random 2. 第三方模块,如连接mysql,需要安装 3. 自己写的Pytho ...

  9. 洗礼灵魂,修炼python(70)--爬虫篇—补充知识:json模块

    在前面的某一篇中,说完了pickle,但我相信好多朋友都不懂到底有什么用,那么到了爬虫篇,它就大有用处了,而和pickle很相似的就是JSON模块 JSON 1.简介 1)JSON(JavaScrip ...

随机推荐

  1. go语言指南之映射练习

    练习:映射 实现 WordCount.它应当返回一个映射,其中包含字符串 s 中每个“单词”的个数.函数 wc.Test 会对此函数执行一系列测试用例,并输出成功还是失败. 你会发现 strings. ...

  2. HTTP入门(一):在Bash中curl查看请求与响应

    HTTP入门(一):在Bash中curl查看请求与响应 本文简单总结HTTP的请求与响应. 本文主要目的是对学习内容进行总结以及方便日后查阅. 详细教程和原理可以参考HTTP文档(MDN). 本文版权 ...

  3. JAVA基础之IO流知识总结

    一.IO流体系图 IO常用的几个流: [I/O流原理作用] Input/Output:输入输出机制 输入机制:允许java程序获取外部设备的数据(磁盘,光盘,网络等). 输出机制:保留java程序中的 ...

  4. 内存:你跑慢点行不行?CPU:跑慢点你养我吗?内存:我不管!(内附超全思维导图)

    主存(RAM) 是一件非常重要的资源,必须要认真对待内存.虽然目前大多数内存的增长速度要比 IBM 7094 要快的多,但是,程序大小的增长要比内存的增长还快很多.不管存储器有多大,程序大小的增长速度 ...

  5. Apache Druid 的集群设计与工作流程

    导读:本文将描述 Apache Druid 的基本集群架构,说明架构中各进程的作用.并从数据写入和数据查询两个角度来说明 Druid 架构的工作流程. 关注公众号 MageByte,设置星标点「在看」 ...

  6. 使用VMware12在CentOS7上部署docker实例

    今天下午算是自己搞了一下午才搞出来,对于认为linux是自己死穴的我,现在能搞出来,心里滋味不是一丢丢,哈哈~~~ 算了,废话不多说,直接上图!步骤如下: 1.在安装好VMware12并安装好了cen ...

  7. python学习列表(Lists).基础二

    列表(Lists) 序列是Python中最基本的数据结构,序列中的每个元素都分配一个数字,它的第一个索引是0第二个索引是1,依次类推. 列表是最常用的Python数据类型,它可以作为一个方括号内的逗号 ...

  8. Simulink仿真入门到精通(六) Simulink模型保存为图片

    6.1 截图保存方式 Ctrl+Alt+A 6.2 拷贝试图方式 Edit→Copy Current View to Clipboard 6.3 saveas函数 用于保存figure或者simuli ...

  9. 结题报告--洛谷P3915

    题目:点此. 我处理这种多组数据的方法被我叫做“mains法”,就是先假设只有一组数据,写一个代码,然后把那个main函数改成mains,最后写一个真正的main函数. 这个“真正的”main函数一般 ...

  10. JavaSE知识概述集

    一.HelloWord(文档启动Java) /* 使用命令行的方式执行的时候,cmd的默认编码格式是GBK 因此在输入中文的时候需要设置文件的编码格式位ANSI,不会出现乱码错误 注意: 0.先用ja ...