JSON介绍
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它是JavaScript(ECMAScript)的子集,采用完全独立于编程语言的文本格式来存储和表示数据。
JSON的语法格式
- 最外层用
{}
扩起来; - 数据以“键:值”对的形式表示,其中键必须用双引号括起来,值可以是双引号包括的字符串、数字、true、false、null、或子对象;
- 每个“键:值”对用逗号分隔;
示例:
{"name": "laobai", "age": 20, "address": "beijing"}
{
"students": [
{"name": "laobai", "age": 20, "address": "beijing"},
{"name": "nichengwe", "age": 18, "address": "shanghai"},
{"name": "nichengyou", "age": 20, "address": "guangzhou"}
]
}
序列化与反序列化
序列化
序列化:把内存⾥的数据类型转换为一种特定格式的内容(例如json格式),使能够存储到硬盘或通过⽹络传输到远程。简单的说就是把Python的数据类型(字典,元组,列表)转为特定的数据类型过程。
反序列化
反序列化,就是将特定的内容(例如json格式)转为Python对象的过程。
Python操作JSON
在Python⾥⾯,进行序列化和反序列化使⽤到的标准库是json,下⾯主要依据不同的数据类型(list,tuple,dict)来进⾏序列化和反序列化的操作。
import json
list1=[1,2,3,4,5,[True,None]]
tuple1=('laobai','age','address')
dict1={'name':'laobai','age':20,'address':'beijing'}
print('----------------------------------')
print('操作前的元list:',list1)
print('操作前的元tuple:',tuple1)
print('操作前的元字典:',dict1)
print('----------------------------------')
print('对list进⾏序列化:',json.dumps(list1))
print('序列化后的类型:',type(json.dumps(list1)))
print('对list序列化后的内容进⾏反序列化:',json.loads(json.dumps(list1)))
print('反序列化后的类型:',type(json.loads(json.dumps(list1))))
print('----------------------------------')
print('对tuple进⾏序列化:',json.dumps(tuple1))
print('序列化后的类型:',type(json.dumps(tuple1)))
print('对tuple序列化后的内容进⾏反序列化:',json.loads(json.dumps(tuple1)))
print('反序列化后的类型:',type(json.loads(json.dumps(tuple1))))
print('----------------------------------')
print('对dict进⾏序列化:',json.dumps(dict1))
print('序列化后的类型:',type(json.dumps(dict1)))
print('对dict序列化后的内容进⾏反序列化:',json.loads(json.dumps(dict1)))
print('反序列化后的类型:',type(json.loads(json.dumps(dict1))))
print('----------------------------------')
执行结果:
----------------------------------
操作前的元list: [1, 2, 3, 4, 5, [True, None]]
操作前的元tuple: ('laobai', 'age', 'address')
操作前的元字典: {'name': 'laobai', 'age': 20, 'address': 'beijing'}
----------------------------------
对list进⾏序列化: [1, 2, 3, 4, 5, [true, null]]
序列化后的类型: <class 'str'>
对list序列化后的内容进⾏反序列化: [1, 2, 3, 4, 5, [True, None]]
反序列化后的类型: <class 'list'>
----------------------------------
对tuple进⾏序列化: ["laobai", "age", "address"]
序列化后的类型: <class 'str'>
对tuple序列化后的内容进⾏反序列化: ['laobai', 'age', 'address']
反序列化后的类型: <class 'list'>
----------------------------------
对dict进⾏序列化: {"name": "laobai", "age": 20, "address": "beijing"}
序列化后的类型: <class 'str'>
对dict序列化后的内容进⾏反序列化: {'name': 'laobai', 'age': 20, 'address': 'beijing'}
反序列化后的类型: <class 'dict'>
----------------------------------
json.dumps
和json.loads
是针对数据类型(字典,元组,列表等)的
json.dump
和json.load
是针对文件的
import json
list1=[1,2,3,4,5,[True,None]]
# 对list1进行序列化并保存到test1.json中
with open('test1.json',mode='wt',encoding='utf-8') as f:
json.dump(list1,f)
# 读取test1.json中被序列化的json进行反序列化操作
with open('test1.json',mode='rt',encoding='utf-8') as f:
l = json.load(f)
print(l,type(l))
执行结果:
序列化的在当前目录生成一个test1.json文件,内容是:
[1, 2, 3, 4, 5, [true, null]]
反序列化的运行结果:
[1, 2, 3, 4, 5, [True, None]] <class 'list'>
Python与JSON之间数据类型对应关系
Python | JSON |
---|---|
list,tuple | array |
dict | Object |
str | string |
int,float | numbers |
True | true |
False | false |
None | null |