文章目录
- 1、什么是序列化
- 2、什么是JSON
- 3、JSON的四个功能
- 3.1、dumps
- 3.2、loads
- 3.3、dump
- 3.4、load
- 4、格式化JSON
- 4.1、indent
- 4.2、ensure_ascii
- 4.3、sort_keys
- 4.4、separators
1、什么是序列化
- 把对象(变量)从内存中变成可存储或传输的过程称之为序列化,在Python中叫pickling,在其他语言中也被称之为serialization,marshalling,flattening等等,都是一个意思。
- 序列化之后,就可以把序列化后的内容写入磁盘,或者通过网络传输到别的机器上。
- 把变量内容从序列化的对象重新读到内存里称之为反序列化,即unpickling。
2、什么是JSON
- 要在不同的编程语言之间传递对象,就必须把对象序列化为标准格式,比如XML,但更好的方法是序列化为JSON,因为JSON表示出来就是一个字符串,可以被所有语言读取,也可以方便地存储到磁盘或者通过网络传输。JSON不仅是标准格式,并且比XML更快,而且可以直接在Web页面中读取,非常方便。
- JSON表示的对象就是标准的JavaScript语言的对象,JSON和Python内置的数据类型对应如下:
JSON类型 | Python类型 |
数字 | int或float |
字符串 | str |
逻辑值,true/false | True/False |
数组,[] | list |
对象 ,{} | dict |
null | None |
3、JSON的四个功能
3.1、dumps
将字符串转换为JSON字符串,即转换成所有程序语言都认识的字符串,即转换成带双引号的字符串(python中的字符串可以用单引号)。
例一:
所有的单引号全部替换成双引号
import json
i=8
i=json.dumps(i) #"8"
print(type(i),"\t"*3,i)
s=’hello‘
s=json.dumps(s) #'"hello"',所有的单引号都会替换成双引号
print(type(s),"\t"*3,s)
l=[1,2]
l=json.dumps(l) #"[1,2]"
print(type(l),"\t"*3,l)
输出:
<class ‘str’> 8
<class ‘str’> “hello”
<class ‘str’> [1, 2]
例二:
转换成序列化对象写入文件。
import json
dic={"name":"chuhe","age":"20"} #类型是<class 'dict'>
j=json.dumps(dic) #类型是#<class 'str'>
f=open("json.txt","w")
f.write(j)
f.close()
执行,并输出:
3.2、loads
将json编码的字符串转换为python的数据结构。
例一:
从3.1中例二中的json.txt中读取并转换成python数据结构
import json
f=open("json.txt","r")
data=f.read() #类型是#<class 'str'>
data=json.loads(data) #类型是<class 'dict'>
f.close()
print(type(data))
print(data)
输出:
<class ‘dict’>
{‘name’: ‘chuhe’, ‘age’: ‘20’}
3.3、dump
与3.1中的dumps功能基本一致,唯一不样的地方是dump含有write的功能
import json
dic={"name":"chuhe","age":"20"}
f=open("json.txt","w")
json.dump(dic,f)
3.4、load
与3.2中的loads功能基本一致,唯一不样的地方是
load带有read功能
即data=f.read()
import json
f=open("json.txt","r")
data=json.load(f)
f.close()
print(type(data))
print(data)
输出:
<class ‘dict’>
{‘name’: ‘chuhe’, ‘age’: ‘20’}
4、格式化JSON
4.1、indent
- indent是dumps的一个参数
- indent 的作用相当于对json的格式进行了排序 ,并给他间隔
例:
import json
dic={"name":"chuhe","age":"20"}
dic=json.dumps(dic,indent=4)
print(dic)
输出:
{
“name”: “chuhe”,
“age”: “20”
}
4.2、ensure_ascii
- ensure_ascii是dumps的一个参数
- 是否直接显示中文
- ensure_ascii=True不显示中文,默认
- ensure_ascii=False显示中文
转换成JSON字符串时,中文字符会被转义
例一:
import json
dic={"name":"锄禾","age":"20"}
dic=json.dumps(dic) #默认ensure_ascii=True,即不显示中文
print(dic)
输出:
{“name”: “\u9504\u79be”, “age”: “20”}
例二:
import json
dic={"name":"锄禾","age":"20"}
dic=json.dumps(dic,ensure_ascii=False,indent=4)
print(dic)
输出:
{
“name”: “锄禾”,
“age”: “20”
}
4.3、sort_keys
- sort_keys是dumps的一个参数
- 先把字母的排序在返回json
- sort_keys=False,不排序,默认
- sort_keys=True,排序
例:
import json
dic={"name":"chuhe","age":"20"}
dic=json.dumps(dic,indent=4,sort_keys=True)
print(dic)
输出:
{
“age”: “20”
“name”: “chuhe”
}
4.4、separators
- separators是dumps的一个参数
- JSON报文输出的格式
- 第一个字符控制每个key-value与key-value间的分隔符
- 第二个字符控制key和value间的分隔符
例:
import json
dic={"name":"chuhe","age":"20"}
dic=json.dumps(dic,indent=4,separators=(",",";"))
print(dic)
输出:
{
“name”;“chuhe”,
“age”;“20”
}