一、JSON
1、什么是json数据
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。
2、json数据的语法
一个json数据只有且只有一个数据,这个数据的数据类型必须是json支持的数据类型
3、json支持的数据类型
JSON 值可以是:数字(整数或浮点数)、字符串(在双引号中)、逻辑值(true 或 false)、数组(在方括号中)、字典(在花括号中)、null
a、数字类型:
包含所有的数字,包括整数,小数:例如100,12.4,-2.3
正数前面不能加‘+’。json支持科学计数法
b、字符串:
使用双引号括起来的数据;例如:"abc", "abc123"
c、布尔:
只有 true和false两个值。
d、数组:
相当于Python的列表,用[]括起来,多个元素用逗号隔开;
例如:[122,"abc"]
e、字典:
相当于Python的字典,用{}括起来,多个键值对用逗号隔开,
例如:{"a" : 1, "b" : 2, "3" : 4}
f.空值
null,相当于Python中的none
{
"name":"小强",
"age":16,
"msg":["a","b"],
"regex": "^http://.*"
};
4、json数据转换python
使用 JSON 函数需要导入 json 库:import json
函数 | 描述 |
---|---|
json.dumps | 将 Python 对象编码成 JSON 字符串 |
json.loads | 将已编码的 JSON 字符串解码为 Python 对象 |
python中提供了json模块专门处理json数据
将json数据转换成python数据(通过爬虫获取到别人提供的json数据,在python中出处理它)
a、转换方式
json | python |
---|---|
数字 | int/float |
字符串 | 字符串 |
布尔 | bool,会将json中的true/false转换成True/False |
数组 | 列表 |
字典 | 字典 |
空值(null) | None |
b、loads方法
loads(字符串, encoding = 'utf-8') - 将字符串中的json数据转换成对应的python数据
注意:字符串中的内容必须是JSON格式数据
import json
content = json.loads('"abc"', encoding = 'utf-8')
print(content, type(content)) # abc <class 'str'>
实例
以下实例将数组编码为 JSON 格式数据:
以下实例展示了Python 如何解码 JSON 对象:
import json
jsonData = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
text = json.loads(jsonData)
print(text) # {u'a': 1, u'c': 3, u'b': 2, u'e': 5, u'd': 4}
5、python转换json数据
将python数据转换成json数据(python写后台接口将数据提供给客户端)
转换方式 python -> json
python | json (json.dumps(对象)) |
---|---|
100(整数) | 100(字符串) |
'abc' | "abc"(单引号变成双引号) |
True/False | true/false |
列表 | 数组 |
元祖 | 数组 |
字典 | 字典 |
集合 | 不能转化成json,报错 |
None | null |
注意:转换后都是字符串类型
dumps(对象) # 这儿的对象指的就是python数据
将指定的对象转换成json数据,以字符串的形式返回这儿的对象指的就是python数据
import json
data = [ { 'a' : 1, 'b' : 2, 'c' : 3, 'd' : 4, 'e' : 5 } ]
json = json.dumps(data) # 返回的json是字符串类型,内容格式是json数据
print(json) # [{"a": 1, "b": 2, "c": 3, "d": 4, "e": 5}]
注意:返回值是字符串,并且字符串的内容是json数据
6、json文件处理
json文件不一定是后缀是.json都是json文件,json文件是文件内容是json数据的文件。
load(文件对象) - 将指定文件中的内容读出来,并且转换成python对应数据。文件对象对应的文件必须是json文件。
dump(对象, 文件对象) - 将指定对象转换成是json格式的字符串,然后写入指定的文件中。
注意:这儿的对象对应的类型必须是能够转换成json的数据类型。
二、json来源
python中的数据请求(HTTP请求),是通过第三方库requsets来提供的。
requests的第三方库的使用
get/post 方法都是发送请求获取接口提供的数据
获取数据的方法都是get请求
get(url, params = None)
url - 需要获取的数据的接口地址
params - 字典,参数列表(给服务器发送请求的时候需要传给服务器的数据)
完整的接口:协议://主机地址/路径?参数名1=值1&参数名2=值2
发送请求,并且获取返回的数据,
服务器返回的数据叫响应
从响应中获取数据
1、获取json数据
content_json = response.json() # 会自动将json数据转换炒年糕python对应的数据
2、获取字符串数据
content_text = response.text
print(type(content_text))
print(content_text)
3、获取二进制数据
content_bytes = response.content # 获取图片,音频等
print(content_bytes)
post(url, params = None, json = None)
三、异常捕获
1、异常捕获报错的地方不报错
知道某段代码会出现异常,而且没有办法避免,同时又不希望出现异常的时候程序不崩溃;这个时候就可以通过异常捕获来让程序不崩溃并且自行处理异常。
2、异常捕获语法
a、try - except(可以捕获所有类型的异常)
try:
代码段1(可能出现异常的代码段)
except:
代码段2(出现异常后处理异常的代码段)
执行过程:执行代码段1,如果代码段1出现异常,程序不崩溃,直接执行代码段2
如果代码段1中没有出现异常,就不执行代码段2而是直接执行后面的其他语句。
b、try - except 错误类型 (捕获指定类型的异常)
try:
代码段1
except 错误类型:
代码段2(只有代码段1中出现了指定类型的异常才捕获)
执行过程:代码段1中出现指定类型错误就执行代码段2
c、try - except(错误类型1,错误类型2...) (同时捕获多种异常)
try:
print('abc'[4])
except (IndexError, IndentationError):
print("Error")
d、try - except 错误类型1 - except 错误类型2...(同时捕获多种异常,可以对不同的异常做不同的处理)
try:
代码段1
except 错误类型1:
代码段2
except 错误类型2:
代码段3
3、抛出异常
主动让程序崩溃
raise 错误类型
if age > 18:
raise ValueError
说明:错误类型 - 可以是系统类型的错误,也可以是自定义错误类型(要求这个值必须是一个类,而且是Exception的子类)
网友评论