python json接口数据提取_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

1070438-20170511230904222-1239859266.png

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"]

1070438-20170511232519051-686291408.png

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/,搜索某个单号,判断它的状态是不是已签收

1070438-20170511233825722-523982127.png

2. 实现代码如下

1070438-20170511234340894-153946825.png

五、参考代码:

# 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接口自动化完整版-------------------------

作者:上海-悠悠 QQ交流群:588402570

也可以关注下我的个人公众号:

1070438-20170417224839696-1584175751.jpg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值