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 = {key1 : value1, key2 : value2 }

 我们举一个例子

>>> 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'

禁止转载以及商业用途,仅作为学习资料,违者必究

原文地址:https://www.cnblogs.com/EvenZheng/p/6850873.html