4.8 JSON
4.8.1 JSON简介
JSON(JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式。它基于 ECMAScript(European Computer Manufacturers Association, 欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
JSON数据不是Python中自带的一种数据类型,但是在Python编程中会经常用到这种数据类型。
JSON 文本格式在语法上与创建 JavaScript 对象的代码相同。由于这种相似性,无需解析器,JavaScript 程序能够使用内建的 eval() 函数,用 JSON 数据来生成原生的 JavaScript 对象。
JSON 是存储和交换文本信息的语法,类似 XML。JSON 比 XML 更小、更快,更易解析。
JSON 独立于语言:JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。 目前非常多的动态(PHP,JSP,.NET)编程语言都支持JSON。
JSON 具有自我描述性,更易理解。
4.8.1.1 与 XML 相同之处
- JSON 是纯文本
-
JSON 具有
自我描述性
(人类可读) - JSON 具有层级结构(值中存在值)
- JSON 可通过 JavaScript 进行解析
- JSON 数据可使用 AJAX 进行传输
4.8.1.2 与 XML 不同之处
- 没有结束标签
- 更短
- 读写的速度更快
- 能够使用内建的 JavaScript eval() 方法进行解析
- 使用数组
- 不使用保留字
4.8.2 JSON语法
JSON 语法是 JavaScript 语法的子集。
- 数据在名称/值对中
- 数据由逗号分隔
- 大括号 {} 保存对象
- 中括号 [] 保存数组,数组可以包含多个对象
4.8.2.1 JSON 值
- 数字(整数或浮点数)
- 字符串(在双引号中)
- 逻辑值(true 或 false)
- 数组(在中括号中)
- 对象(在大括号中)
- null
4.8.3 Python3中使用JSON
通过上面对JSON数据的介绍,我们可以发现JSON数据其实和Python中的字典非常类似。
Python3 中可以使用 json 模块来对 JSON 数据进行编解码,它包含了两个函数:
json.dumps(): 对数据进行编码。Python→JSON
json.loads(): 对数据进行解码。JSON→Python
在 json 的编解码过程中,Python 的原始类型与 json 类型会相互转换,具体的转化对照如下:
Python 编码为 JSON 类型转换对应表:
Python | JSON |
---|---|
dict | object |
list, tuple | array |
str | string |
int, float, int- & float-derived Enums | number |
True | true |
False | false |
None | null |
JSON 解码为 Python 类型转换对应表:
JSON | Python |
---|---|
object | dict |
array | list |
string | str |
number(int) | int |
number(real) | float |
true | True |
false | False |
null | None |
4.8.3.1 Python字典转换为JSON对象
|
import json |
|
|
|
data = { |
|
'no': 1, |
|
'name': 'zhangsan' |
|
} |
|
|
|
json_str = json.dumps(data) |
|
print("Python原始数据:", data) |
|
print(" JSON对象:", json_str) |
Python原始数据: {'no': 1, 'name': 'zhangsan'} JSON对象: {"no": 1, "name": "zhangsan"}
4.8.3.2 JSON对象转换为Python字典
|
import json |
|
|
|
data = { |
|
'no': 1, |
|
'name': 'zhangsan' |
|
} |
|
|
|
json_str = json.dumps(data) |
|
print("Python原始数据:", data) |
|
print(" JSON对象:", json_str) |
|
py_data = json.loads(json_str) |
|
print(py_data['name']) |
Python原始数据: {'no': 1, 'name': 'zhangsan'} JSON对象: {"no": 1, "name": "zhangsan"} zhangsan
4.8.3.3 JSON数据读取或写入到文件中
|
# 写入 JSON 数据 |
|
with open('data.json', 'w') as f: |
|
json.dump(data, f) |
|
|
|
# 读取数据 |
|
with open('data.json', 'r') as f: |
|
data = json.load(f) |