python基础学习(最终篇)

JSON 的基础使用

一. JSON 简介

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它是 JavaScript 的子集,易于人阅读和编写。

JSON 用来存储和交换文本信息,比 xml 更小/更快/更易解析,易于读写,占用带宽小,网络传输速度快的特性,适用于数据量大,不要求保留原有类型的情况。。

前端和后端进行数据交互,其实就是 JS 和 Python 进行数据交互!

二. JSON 语法规则

  1. 名称必须用双引号(即:” “)来包括
  2. 值可以是双引号包括的字符串、数字、true、false、null、JavaScript 数组或子对象
  3. 数据在 name/value 中
  4. 数据见用逗号分隔
  5. 花括号保存对象
  6. 方括号保存数组

三. JSON 数据类型

一并列举出 Python 与 JSON 数据类型的映射关系:

PythonJSON
dictobject
list, tuplearray
str, unicodestring
int, long, floatnumber
Truetrue
Falsefalse
Nonenull

四. JSON 对象

在花括号中书写,对象可以包含多个名称/值对。
例如:

1
{"firstname": "jonh", "lastname": "Doe"}

五. JSON 数组

Employees 是包含三个对象的数组。

每个对象代表一条关于某个人名的记录,在方括号中书写,数组可以包含多个对象:

1
2
3
4
5
6
7
{
"employees": [
{ “firstName”:“John” , “lastName”:“Doe” },
{ “firstName”:“Anna” , “lastName”:“Smith” },
{ “firstName”:“Peter” , “lastName”:“Jones” }
]
}

再比如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[
{
name: "情歌",
artist: "云汐",
url: "https://xingstar520.oss-cn-beijing.aliyuncs.com/%E4%BA%91%E6%B1%90%20-%20%E6%83%85%E6%AD%8C.mp3",
cover:
"https://xingstar520.oss-cn-beijing.aliyuncs.com/%E6%83%85%E6%AD%8C.png",
lrc: "/source/json/云汐-情歌.lrc",
},
{
name: "青花瓷",
artist: "周杰伦",
url: "https://npm.elemecdn.com/anzhiyu-music@1.0.4/青花瓷/青花瓷.mp3",
cover:
"https://y.qq.com/music/photo_new/T002R300x300M000002eFUFm2XYZ7z_2.jpg?max_age=2592000",
lrc: "https://npm.elemecdn.com/anzhiyu-music@1.0.4/青花瓷/青花瓷.lrc",
},
];

六. JSON 函数

使用 JSON 函数需要导入 json 库:<span style="color:red">import json。

函数描述
json.dumps将 Python 对象编码成 JSON 字符串
json.loads将已编码的 JSON 字符串解码为 Python 对象
json.dump将 Python 内置类型序列化为 json 对象后写入文件
json.load读取文件中 json 形式的字符串元素转化为 Python 类型
encode将 Python 对象编码成 JSON 字符串
decode将已编码的 JSON 字符串解码为 Python 对象

1. json.dumps

json.dumps 用于将 Python 对象编码成 JSON 字符串。

1
2
3
4
5
import json

data = {'name': 'nanbei', 'age': 18}
# 将Python对象编码成json字符串
print(json.dumps(data))

输出结果为:

1
{"name": "nanbei", "age": 18}

再如:

1
2
3
4
5
import json

data = json.dumps({'a': 'Runoob', 'b': 7}, sort_keys=True, indent=4, separators=(',', ': '))
print(data)
# separators参数用于指定分隔符 indent参数用于指定缩进字符个数 sort_keys参数用于指定是否按照字典排序输出

输出结果为:

1
2
3
4
{
"a": "Runoob",
"b": 7
}

2. json.loads

json.loads 用于解码 JSON 数据。该函数返回 Python 字段的数据类型。

1
2
3
4
5
6
7
8
import json

data = {'name': 'nanbei', 'age': 18}
# 将Python对象编码成json字符串
print(json.dumps(data, sort_keys=True, indent=4, separators=(',', ':')))
# 将json字符串解码成Python对象
a = json.dumps(data)
print(json.loads(a))

输出结果为:

1
2
3
4
5
{
"age":18,
"name":"nanbei"
}
{'name': 'nanbei', 'age': 18}

再如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import json

data = (1,2,3,4)
data_json = [1,2,3,4]
#将Python对象编码成json字符串
print(json.dumps(data))
print(json.dumps(data_json))

#将Python对象编码成json字符串
a = json.dumps(data)
b = json.dumps(data_json)
#将json字符串编码成Python对象
print(json.loads(a))
print(json.loads(b))

输出结果为:

1
2
3
4
 [1, 2, 3, 4]
[1, 2, 3, 4]
[1, 2, 3, 4]
[1, 2, 3, 4]

3. json.dump

将 Python 内置类型序列化为 json 对象后写入文件:

1
2
3
4
5
6
7
8
9
import json

data = {
'nanbei':'haha',
'a':[1,2,3,4],
'b':(1,2,3)
}
with open('json_test.txt','w+') as f:
json.dump(data,f)

4. json.load

读取文件中 json 形式的字符串元素转化为 Python 类型:

1
2
3
4
5
6
7
8
9
10
11
12
import json

data = {
'nanbei':'haha',
'a':[1,2,3,4],
'b':(1,2,3)
}
with open('json_test.txt','w+') as f:
json.dump(data,f)

with open('json_test.txt','r+') as f:
print(json.load(f))

5. encode

Demjson3
demjson3 是 python 的第三方模块库,可用于编码和解码 JSON 数据,包含了 JSONLint 的格式化及校验功能。
安装模块:

1
pip install demjson3

Python encode() 函数用于将 Python 对象编码成 JSON 字符串。

1
2
3
4
5
6
import demjson3

data = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ]

json = demjson3.encode(data)
print(json)

6. decode

Python 可以使用 demjson.decode() 函数解码 JSON 数据。该函数返回 Python 字段的数据类型。

1
2
3
4
5
6
import demjson3

json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';

text = demjson3.decode(json)
print(text)

7. 参数说明

参数作用
skipkeys如果为 True 的话,则只能是字典对象,否则会 TypeError 错误, 默认 False
ensure_ascii确定是否为 ASCII 编码
check_circular循环类型检查,如果为 True 的话
allow_nan确定是否为允许的值
indent会以美观的方式来打印,呈现,实现缩进
separators对象分隔符,默认为,
encoding编码方式,默认为 utf-8
sort_keys如果是字典对象,选择 True 的话,会按照键的 ASCII 码来排序

总结

  1. dump:存入的实例对象 object(序列化)
  2. dumps:存入的 JSON 的字符串数据
  3. load:读取的实例对象 object(反序列化)
  4. loads:读取的 JSON 的字符串数据,转化为 Python 字典对象

❤️❤️❤️Python完结撒花😊❤️❤️❤️