幻化成蝶|python接口自动化-Json数据处理
前言
有些post的请求参数是json格式的 , 这个前面第二篇post请求里面提到过 , 需要导入json模块处理 。
一般常见的接口返回数据也是json格式的 , 我们在做判断时候 , 往往只需要提取其中几个关键的参数就行 , 这时候就需要json来解析返回的数据了 。
1.Json简介:Json , 全名 JavaScript Object Notation , 是一种轻量级的数据交换格式,常用于http请求中
【幻化成蝶|python接口自动化-Json数据处理】2.可以用help(json),查看对应的源码注释内容
Encoding basic Python object hierarchies:: >>> import json >>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}]) '["foo", {"bar": ["baz", null, 1.0, 2]}]' >>> print json.dumps("\"foo\bar") "\"foo\bar" >>> print json.dumps(u'\u1234') "\u1234" >>> print json.dumps('\\') "\\" >>> print json.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True) {"a": 0, "b": 0, "c": 0} >>> from StringIO import StringIO >>> io = StringIO() >>> json.dump(['streaming API'], io) >>> io.getvalue() '["streaming API"]'
1.首先说下为什么要encode , python里面bool值是True和False,json里面bool值是true和false,并且区分大小写 , 这就尴尬了 , 明明都是bool值 。
在python里面写的代码 , 传到json里 , 肯定识别不了 , 所以需要把python的代码经过encode后成为json可识别的数据类型 。
2.举个简单例子 , 下图中dict类型经过json.dumps()后变成str , True变成了true , False变成了
fasle
本文插图
3.以下对应关系表是从json模块的源码里面爬出来的.python的数据类 , 经过encode成json的数据类型 , 对应的表如下 | | Python | JSON | | +===================+===============+ | | dict | object | | +-------------- -----+---------------+ | | list, tuple | array | | +-------------------+---------------+ | | str, unicode | string | | +-------------------+---------------+ | | int, long, float | number | | +-------------------+---------------+ | | True | true | | +-------------------+---------------+ | | False | false | | +-------------------+---------------+ | | None | null | | +-------------------+---------------+
三、decode(json->python)
1.以接口返回成功结果:{'status': 'success', 'msg': '接口连接成功!'}为例 , 我们其实最想知道的是success这个字段返回的是True还是False
2.如果以content字节输出 , 返回的是一个字节序列 , 这样获取后面那个结果就不方便了
3.如果经过json解码后 , 返回的就是一个字典 , 这样获取后面那个结果 , 就用字典的方式去取值
本文插图
4.同样json数据转化成python可识别的数据 , 对应的表关系如下
| +---------------+-------------------+ | | JSON | Python | | +===============+===================+ | | object | dict | | +---------------+-------------------+ | | array | list | | +---------------+-------------------+ | | string | unicode | | +---------------+-------------------+ | | number (int) | int, long | | +---------------+-------------------+ | | number (real) | float | | +---------------+-------------------+ | | true | True | | +---------------+-------------------+ | | false | False | | +---------------+-------------------+ | | null | None | | +---------------+-------------------+
四、案例分析
1.比如打开快递网: , 搜索某个单号 , 判断它的状态是不是已签收
本文插图
2. 实现代码如下
本文插图
五、参考代码:
# coding:utf-8import requestsimport requests
url = "index-ajaxselectcourierinfo-1202247993797-yunda.html"
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0"} # get方法其它加个ser-Agent就可以了
s = requests.session()
r = s.get(url, headers=headers,verify=False)
result = r.json()
data = http://news.hoteastday.com/a/result["data"]# 获取data里面内容
print (data)
print (data[0])# 获取data里最上面有个
get_result = data[0]['context']# 获取已签收状态
print (get_result)
if u"已签收" in get_result:
print ("快递单已签收成功")
else:
print ("未签收")
推荐阅读
- 睡眠|幻想有“不用睡觉”的超能力?那其实是种病
- 超光速|最脑洞科幻:1秒1光年,时间不倒流,极超光速飞船为何这么牛?
- 乙肝|从乙肝恶化成肝癌,一般要长时间?医生:3项检查定期做,能预防
- 克苏鲁|克苏鲁科学入坑(教)指南|问答
- 宇宙|宇宙间根本不存在粉色,颜色只是幻觉
- 异种器官移植|异种器官移植!未来十年,这项科幻般的技术可能颠覆性出现!
- 杭州|雨停了?!杭城马上直冲17℃!还有一个“梦幻小惊喜”
- 飞船|太阳帆飞船是怎么一回事?科幻电影中的场景可以实现吗?
- 蝴蝶|蝴蝶正在美国西部消失 但不是像科学家们想象的那样
- 河南|天空“三个太阳”!魔幻!河南多地出现!
