概念介绍
1、JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。
2、在python中的json应用就是实现一些数据结构(列表、元组、字典)到字符串之间的转换,当数据结构变为字符串之后就很容易在程序之间传递。
3、Python中序列化指的是将Python中的数据结构(列表、元组、字典)编码转换为JSON格式的字符串;而反序列化指的是将JSON格式的字符串编码转换为Python中的数据结构(列表、元组、字典);
4、元组经过序列化处理后,再通过反序列化处理后,数据类型不再是元组(而是列表);但列表、字典经过序列化处理后,再通过反序列化处理后,数据类型不变。
基本使用
函数 | 描述 |
---|---|
json.dumps(data) | 将 Python 对象编码成 JSON 字符串 |
json.loads(JSON) | 将已编码的 JSON 字符串解码为 Python 对象 |
json.dump(data,fp) | 将Python内置类型序列化为json对象后写入文件 |
json.load(fp) | 读取文件中json形式的字符串元素转化为原来的Python类型 |
dumps()或者dunp()返回类型都是str
分清加s和不加s都是干什么的,以及参数的区别。
import json
lst = [1,2,"ok",[2,3]]
tple = (2,3,4,"haha")
dic = {"name":"Tom","Age":12}
json1 = json.dumps(lst)
print("list转变为json字符串",json1)
#list转变为json字符串 [1, 2, "ok", [2, 3]]
json2 = json.dumps(tple)
print("tuple转变为json字符串",json2)
#tuple转变为json字符串 [2, 3, 4, "haha"]
json3 = json.dumps(dic)
print("dict转变为json字符串",json3)
#dict转变为json字符串 {"name": "Tom", "Age": 12} #类型都是str
print(json.loads(json1))#json.loads()是函数但不是方法
#[1, 2, 'ok', [2, 3]]
print(json.loads(json2))
#[2, 3, 4, 'haha']
print(json.loads(json3))
#{'name': 'Tom', 'Age': 12}
"""dump()和load()"""
with open(r"C:\Users\lenovo\Desktop\sent.txt","w") as fp:
json.dump(lst,fp)
#成功将json字符串保存至本地
with open(r"C:\Users\lenovo\Desktop\sent.txt","r") as fp:
result = json.load(fp)
print(result)
#[1, 2, 'ok', [2, 3]]
参数详解
1、**dumps()和dump()**二者参数大致一样只是相差了一个文件指针。
(1) indent:非负整数,表示编码后的字符串的缩进方式,
默认为None表示无缩进,此时一行打印出来,
一般设为4,
如果设为0则只会添加换行符。
indent参数根据数据格式缩进显示,读起来更加清晰, indent的值,代表缩进空格式:
(2)ensure_ascii
输出真正的中文需要指定ensure_ascii=False,如果使用默认配置,输出的会是‘凉凉’的ASCII字符吗,而不是真正的中文。这是因为json.dumps 序列化时对中文默认使用的ascii编码。
lst = [1,2,"你好",[2,3]]
"""无缩进,使用ascii"""
json1 = json.dumps(lst)
print(json1)
[1, 2, "\u4f60\u597d", [2, 3]]
"""有缩进,缩进为0,使用ascii"""
json1 = json.dumps(lst,indent = 0)
print(json1)
[
1,
2,
"\u4f60\u597d",
[
2,
3
]
]
"""有缩进,缩进为4,使用ascii"""
json1 = json.dumps(lst,indent = 4)
print(json1)
[
1,
2,
"\u4f60\u597d",
[
2,
3
]
]
"""有缩进,缩进为4,不使用ascii"""
json1 = json.dumps(lst,indent = 4,ensure_ascii = False)
print(json1)
[
1,
2,
"你好",
[
2,
3
]
]
load()一般不使用额外的参数。