Python接口自动化---json数据类型取值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python接口自动化---json数据类型取值相关的知识,希望对你有一定的参考价值。
接触自动化也有一段时间了,之前学习过selenium,appium,这段时间在学习接口自动化,上次出现一个问题,是requests的json解析数据,要从解析出来的数据选取数据出来做assertEqual判断,结果把我难倒了,虽然说是一点简单的知识点,但是如果基础不扎实,或者不仔细的人,就会遇到我的这种情况,最终询问了老司机,把问题解决了。
案例回顾
下面附上接口:
http://tj.nineton.cn/Heart/index/all?city=CHSH000000&language=zh-chs&unit=c&aqi=city&alarm=1
这个是一个天气预报的接口,通过postman解析,会得到一个返回值,利用json解析,会得到很多数据,那么我选取其中的一部分数据,另外加上几个元组,把元组也整合在一起,做一个解析。
下面附上解析的数据
r = {
"status": "OK",
"weather": [
{
"city_name": "上海",
"now": {
"text": "阴",
"code": "9"
},
"future": [
{
"date": "2017-05-12",
"high": "22"
},
{
"date": "2017-05-13",
"high": "30"
}
]
},
("NanChang","ChangSha","HangZhou"),
["ShangHai","BeiJing","ShenZhen"]
]
}
那么,我们要分别获取字典里面的status为OK的值,city_name为上海的值,date为2017-05-13,还有元组里面的"ChangSha",list里面的"ShenZhen"的值
有些人看到,就会比较迷糊,看到这么多,我该如何取值,或者,可能会由于自己的粗心,没有看到某一个符号,或者少数了几个数,导致测试结果的失败,那么,在写答案之前,我们先解析一下上边的数据类型。
{}那么肯定为字典咯,("NanChang","ChangSha","HangZhou")为元组,["ShangHai","BeiJing","ShenZhen"]为列表list
一,元组回顾
下面,我们就先回顾一下元组,
Python的元组与列表类似,不同之处在于元组的元素不能修改。元组使用小括号,列表使用方括号。元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。
例:other_city = ("NanChang","ChangSha","HangZhou")
元组与字符串类似,下标索引从0开始,可以进行截取,组合等...
>>> r = ("NanChang","ChangSha","HangZhou")
获取单个字符串
>>> r[0]
‘NanChang‘
截取第一个和第二个字符串
>>> r[0:2]
(‘NanChang‘, ‘ChangSha‘)
获取倒数第一个字符串
>>> r[-1]
‘HangZhou‘
获取所有的字符串
>>> r[0:]
(‘NanChang‘, ‘ChangSha‘, ‘HangZhou‘)
二,列表list回顾
同理,列表list的获取方式与元组一样,我们就做一个简单的回顾就可以了
r ["NanChang","ChangSha","HangZhou"]
>>> r[0]
"NanChang"
此处不再多说
三,字典回顾
下一个就是字典,
字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示
我们举一个例子
>>> d = {"name":"XiaoMing","age":"15","sexy":"man"}
>>> d["name"]
‘XiaoMing‘
四,答案解析
那么,分析完以上信息,就可以开始我们取值了,相信你看到这里,就会感觉,无论多少数据,取值会很简单的
1,status
取第一个值:status,它就在字典里面第一个,所以很好取值,就是
>>> r["status"]
‘OK‘
2,city_name = 上海
取第二个值:city_name为上海,这里面有点绕,dict+list+dict,其实这样分析出来就很简单了,那么我们就开始一步步分析吧
上海在weather里面,所以我们取值
r["weather"]
[{‘now‘: {‘text‘: ‘阴‘, ‘code‘: ‘9‘}, ‘city_name‘: ‘上海‘, ‘future‘: [{‘high‘: ‘22‘, ‘date‘: ‘2017-05-12‘}, {‘high‘: ‘30‘, ‘date‘: ‘2017-05-13‘}]}, (‘NanChang‘, ‘ChangSha‘, ‘HangZhou‘), (‘ShangHai‘, ‘BeiJing‘, ‘ShenZhen‘)]
city_name在list里面的第一个dict里面,所以我们取值
>>> r["weather"][0]
{‘now‘: {‘text‘: ‘阴‘, ‘code‘: ‘9‘}, ‘city_name‘: ‘上海‘, ‘future‘: [{‘high‘: ‘22‘, ‘date‘: ‘2017-05-12‘}, {‘high‘: ‘30‘, ‘date‘: ‘2017-05-13‘}]}
上海在dict的city_name里面,所以就很简单的三步取值取出来的
>>> r["weather"][0]["city_name"]
‘上海‘
3,date = 2017-05-13
现在取第三个值date为2017-05-13,这个其实就是比上面的多了两步,多了一个list和一个dict,我就直接写答案了
>>> r["weather"][0]["future"][1]["date"]
‘2017-05-13‘
4,ChangSha 和 ShenZhen的取值
现在取第四个值,元组里面的"ChangSha"
"ChangSha"在元组里面,这个元组在list里面,所以,我们先要获取到该元组
r["weather"][1]
(‘NanChang‘, ‘ChangSha‘, ‘HangZhou‘)
在下一步
r["weather"][1][1]
‘ChangSha‘
同理,list里面的"ShenZhen"的值就会变得很简单了,我就直接写答案了
>>> r["weather"][2][2]
‘ShenZhen‘
解析数据其实很简单,只要有点基础,就可以解析,只不过第二个值会有点绕,dict+list+dict+list,经过一分析,就会发现,其实不会太难,一步一步慢慢分析,做测试不是会去找bug,也要去分析原因,你会事半功倍的。
最后附上所有的代码
r = {
"status": "OK",
"weather": [
{
"city_name": "上海",
"now": {
"text": "阴",
"code": "9"
},
"future": [
{
"date": "2017-05-12",
"high": "22"
},
{
"date": "2017-05-13",
"high": "30"
}
]
},
("NanChang","ChangSha","HangZhou"),
("ShangHai","BeiJing","ShenZhen")
]
}
>>> r["status"]
‘OK‘
>>> r["weather"]
[{‘now‘: {‘text‘: ‘阴‘, ‘code‘: ‘9‘}, ‘city_name‘: ‘上海‘, ‘future‘: [{‘high‘: ‘22‘, ‘date‘: ‘2017-05-12‘}, {‘high‘: ‘30‘, ‘date‘: ‘2017-05-13‘}]}, (‘NanChang‘, ‘ChangSha‘, ‘HangZhou‘), (‘ShangHai‘, ‘BeiJing‘, ‘ShenZhen‘)]
>>> r["weather"][0]
{‘now‘: {‘text‘: ‘阴‘, ‘code‘: ‘9‘}, ‘city_name‘: ‘上海‘, ‘future‘: [{‘high‘: ‘22‘, ‘date‘: ‘2017-05-12‘}, {‘high‘: ‘30‘, ‘date‘: ‘2017-05-13‘}]}
>>> r["weather"][0]["city_name"]
‘上海‘
>>> r["weather"][0]
{‘now‘: {‘text‘: ‘阴‘, ‘code‘: ‘9‘}, ‘city_name‘: ‘上海‘, ‘future‘: [{‘high‘: ‘22‘, ‘date‘: ‘2017-05-12‘}, {‘high‘: ‘30‘, ‘date‘: ‘2017-05-13‘}]}
>>> r["weather"][0]["future"]
[{‘high‘: ‘22‘, ‘date‘: ‘2017-05-12‘}, {‘high‘: ‘30‘, ‘date‘: ‘2017-05-13‘}]
>>> r["weather"][0]["future"][1]["date"]
‘2017-05-13‘
>>> r["weather"][1][1]
‘ChangSha‘
>>> r["weather"][2][2]
‘ShenZhen‘
禁止转载以及商业用途,仅作为学习资料,违者必究
以上是关于Python接口自动化---json数据类型取值的主要内容,如果未能解决你的问题,请参考以下文章
python接口自动化13-data和json参数傻傻分不清【悠悠】