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

全書購買地址 https://yuedu.baidu.com/ebook/585ab168302b3169a45177232f60ddccda38e695


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

也可以關注下我的個人公眾號:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM