python接口自动化5-Json数据处理
Posted 旭旭杂货店
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python接口自动化5-Json数据处理相关的知识,希望对你有一定的参考价值。
前言
有些post的请求参数是json格式的,这个前面第二篇post请求里面提到过,需要导入json模块处理。
一般常见的接口返回数据也是json格式的,我们在做判断时候,往往只需要提取其中几个关键的参数就行,这时候就需要json来解析返回的数据了。
一、json模块简介
1.Json简介:Json,全名 JavaScript Object Notation,是一种轻量级的数据交换格式,常用于http请求中
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"]\'
二、Encode(python->json)
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.以第三篇的登录成功结果:{"success":true}为例,我们其实最想知道的是success这个字段返回的是True还是False
2.如果以content字节输出,返回的是一个字符串:{"success":true},这样获取后面那个结果就不方便了
3.如果经过json解码后,返回的就是一个字典:{u\'success\': True},这样获取后面那个结果,就用字典的方式去取值:result2["success"]
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.比如打开快递网:http://www.kuaidi.com/,搜索某个单号,判断它的状态是不是已签收
2. 实现代码如下
五、参考代码:
# coding:utf-8 import requests
url = "http://www.kuaidi.com/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 = 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 "未签收"
以上是关于python接口自动化5-Json数据处理的主要内容,如果未能解决你的问题,请参考以下文章