文章目录
- JSON的基础使用
- 一. JSON简介
- 二. JSON语法规则
- 三. JSON数据类型
- 四. JSON对象
- 五. JSON数组
- 六. JSON函数
- 1. json.dumps
- 2. json.loads
- 3. json.dump
- 4. json.load
- 5. encode
- 6. decode
- 7. 参数说明
- 总结
JSON的基础使用
一. JSON简介
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它是JavaScript的子集,易于人阅读和编写。
JSON用来存储和交换文本信息,比xml更小/更快/更易解析,易于读写,占用带宽小,网络传输速度快的特性,适用于数据量大,不要求保留原有类型的情况。。
前端和后端进行数据交互,其实就是JS和Python进行数据交互!
二. JSON语法规则
- 名称必须用双引号(即:" ")来包括
- 值可以是双引号包括的字符串、数字、true、false、null、JavaScript数组或子对象
- 数据在name/value中
- 数据见用逗号分隔
- 花括号保存对象
- 方括号保存数组
三. JSON数据类型
一并列举出Python与JSON数据类型的映射关系:
Python | JSON |
---|---|
— | — |
dict | object |
list, tuple | array |
str, unicode | string |
int, long, float | number |
True | true |
False | false |
None | null |
四. JSON对象
在花括号中书写,对象可以包含多个名称/值对。
例如:
{"firstname": "jonh", "lastname": "Doe"}
五. JSON数组
Employees是包含三个对象的数组。
每个对象代表一条关于某个人名的记录,在方括号中书写,数组可以包含多个对象:
{"employees": [{ “firstName”:“John” , “lastName”:“Doe” },{ “firstName”:“Anna” , “lastName”:“Smith” },{ “firstName”:“Peter” , “lastName”:“Jones” }]
}
再比如:
[{"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 库: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 字符串。
import jsondata = {'name': 'nanbei', 'age': 18}
# 将Python对象编码成json字符串
print(json.dumps(data))
输出结果为:
{"name": "nanbei", "age": 18}
再如:
import jsondata = json.dumps({'a': 'Runoob', 'b': 7}, sort_keys=True, indent=4, separators=(',', ': '))
print(data)
# separators参数用于指定分隔符 indent参数用于指定缩进字符个数 sort_keys参数用于指定是否按照字典排序输出
输出结果为:
{"a": "Runoob","b": 7
}
2. json.loads
json.loads 用于解码 JSON 数据。该函数返回 Python 字段的数据类型。
import jsondata = {'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))
输出结果为:
{"age":18,"name":"nanbei"
}
{'name': 'nanbei', 'age': 18}
再如:
import jsondata = (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]
3. json.dump
将Python内置类型序列化为json对象后写入文件:
import jsondata = {'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类型:
import jsondata = {'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 的格式化及校验功能。
安装模块:
pip install demjson3
Python encode() 函数用于将 Python 对象编码成 JSON 字符串。
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 字段的数据类型。
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码来排序 |
总结
- dump:存入的实例对象object(序列化)
- dumps:存入的JSON的字符串数据
- load:读取的实例对象object(反序列化)
- loads:读取的JSON的字符串数据,转化为Python字典对象
❤️❤️❤️Python完结撒花😊❤️❤️❤️