JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它是JavaScript的子集,易于人阅读和编写。
JSON用来存储和交换文本信息,比xml更小/更快/更易解析,易于读写,占用带宽小,网络传输速度快的特性,适用于数据量大,不要求保留原有类型的情况。。
前端和后端进行数据交互,其实就是JS和Python进行数据交互!
一并列举出Python与JSON数据类型的映射关系:
Python | JSON |
---|---|
— | — |
dict | object |
list, tuple | array |
str, unicode | string |
int, long, float | number |
True | true |
False | false |
None | null |
在花括号中书写,对象可以包含多个名称/值对。
例如:
{"firstname": "jonh", "lastname": "Doe"}
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 库:import json。
函数 | 描述 |
---|---|
json.dumps | 将 Python 对象编码成 JSON 字符串 |
json.loads | 将已编码的 JSON 字符串解码为 Python 对象 |
json.dump | 将Python内置类型序列化为json对象后写入文件 |
json.load | 读取文件中json形式的字符串元素转化为Python类型 |
encode | 将 Python 对象编码成 JSON 字符串 |
decode | 将已编码的 JSON 字符串解码为 Python 对象 |
json.dumps 用于将 Python 对象编码成 JSON 字符串。
import json
data = {'name': 'nanbei', 'age': 18}
# 将Python对象编码成json字符串
print(json.dumps(data))
输出结果为:
{"name": "nanbei", "age": 18}
再如:
import json
data = json.dumps({'a': 'Runoob', 'b': 7}, sort_keys=True, indent=4, separators=(',', ': '))
print(data)
# separators参数用于指定分隔符 indent参数用于指定缩进字符个数 sort_keys参数用于指定是否按照字典排序输出
输出结果为:
{
"a": "Runoob",
"b": 7
}
json.loads 用于解码 JSON 数据。该函数返回 Python 字段的数据类型。
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))
输出结果为:
{
"age":18,
"name":"nanbei"
}
{'name': 'nanbei', 'age': 18}
再如:
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]
将Python内置类型序列化为json对象后写入文件:
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)
读取文件中json形式的字符串元素转化为Python类型:
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))
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)
Python 可以使用 demjson.decode() 函数解码 JSON 数据。该函数返回 Python 字段的数据类型。
import demjson3
json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
text = demjson3.decode(json)
print(text)
参数 | 作用 |
---|---|
skipkeys | 如果为True的话,则只能是字典对象,否则会TypeError错误, 默认False |
ensure_ascii | 确定是否为ASCII编码 |
check_circular | 循环类型检查,如果为True的话 |
allow_nan | 确定是否为允许的值 |
indent | 会以美观的方式来打印,呈现,实现缩进 |
separators | 对象分隔符,默认为, |
encoding | 编码方式,默认为utf-8 |
sort_keys | 如果是字典对象,选择True的话,会按照键的ASCII码来排序 |