目录
一、简介
二、属性
三、数据格式
一、简介
Json,全称JavaScript Object Notation,也就是JavaScript对象标记,通过对象和数组的组合表示数据,虽然构造简洁但是结构化程度非常高,是一种轻量级的数据交换格式。Json最广泛的应用是作为AJAX中web服务器和客户端的通讯的数据格式。现在也常用于http请求中,所以对json的各种学习,是自然而然的事情。
二、属性
主要用于将python对象编码为json格式输出或存储,以及将json格式对象解码为python对象。
方法 | 解释 |
---|---|
json.dump() | 传入一个python对象,将其编码为json格式后存储到IO流中 |
json.dumps() | 传入一个python对象,将其编码为json格式后存储到str中 |
json.load() | 传入一个json格式的文件流,将其编码为python对象 |
json.loads() | 传入一个json格式的str,将其编码为python对象 |
1.json.loads()
用法:传入一个json格式的str,将其编码为python对象
eg:
一段 JSON 形式的字符串,它是 str 类型,我们用 json.loads转换成python的数据结构,变成列表或字典,这样我们就能进行操作了。
import json
data = '''
[{
"name": "小明",
"height": "170",
"age": "18"
}, {
"name": "小红",
"height": "165",
"age": "20"
}]
'''
# 打印data类型
print(type(data))
# json类型的数据转化为python类型的数据
new_data = json.loads(data)
# 打印data类型
print(type(new_data))
运行结果:
这样来我们就可以用索引获取对应的内容了,例如想要获取第一个元素里的name属性,可以使用如下方式:
import json
data = '''
[{
"name": "小明",
"height": "170",
"age": "18"
}, {
"name": "小红",
"height": "165",
"age": "20"
}]
'''
# json类型的数据转化为python类型的数据
new_data = json.loads(data)
# 获取内容
name = new_data[0]['name']
new_name = new_data[0].get('name')
# 打印转换后data类型
print(name)
print(new_name)
运行结果:
2.json.load()
用法:传入一个json格式的文件流,将其编码为python对象
eg:
load方法操作的是整个文件对象,这里是将整个整个文件对象里面的内容转化为json对象。(下图是文件操作对象)
import json
# 构建该文件的文件对象
with open('test1.json',encoding='utf-8')as fp:
# 加载垓文件对象,转换为python类型的数据
pyth_list = json.load(fp)
print(pyth_list)
print(type(pyth_list))
print(type(pyth_list[0]))
运行结果:
把python类型的数据转换成json字符串
dumps函数
import json
data = '''
[{
"name": "小明",
"height": "170",
"age": "18"
}, {
"name": "小红",
"height": "165",
"age": "20"
}]
'''
# 打印要来data类型
print(type(data))
# json类型的数据转化为python类型的数据
new_data = json.loads(data)
# 把python类型的数据转换成json字符串
lit = json.dumps(new_data)
# 打印转换后data类型
print(type(new_data))
print(type(lit))
运行结果:
其实loads和dumps的用法都是一致的,loads是将json类型的数据转化为python类型的数据,而dumps是将json类型的数据转化为python类型的数据。相当于一个是编码一个是解码。
2.json.dump()
把python类型的数据以json格式储存到文件中
eg:
为了输出中文,还需要指定参数 ensure_ascii 为 False
我们发现一个问题,就是转成json字符串之后,中文显示是乱码。
这个是因为json在进行序列化时,默认使用的是编码是ASCII,而中文为Unicode编码,ASCII中不包含中文,所以出现了乱码。
想要json.dumps()能正常显示中文,只要加入参数ensure_ascii=False即可,这样json在序列化的时候,就不会使用默认的ASCII编码。
三、数据格式
一个 JSON 对象可以写为如下形式:
[{
"name": "小明",
"height": "170",
"age": "18"
}, {
"name": "小红",
"height": "165",
"age": "20"
}]
由中括号包围的就相当于列表类型,列表中的每个元素可以是任意类型,这个示例中它是字典类型,由大括号包围。
JSON 可以由以上两种形式自由组合而成,可以无限次嵌套,结构清晰,是数据交换的极佳方式。