天天看點

post json背景處理資料_python接口自動化-Json資料處理一、json子產品簡介二、Encode(python->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(""foobar")

""foobar"

>>> print json.dumps(u'ሴ')

"ሴ"

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

post json背景處理資料_python接口自動化-Json資料處理一、json子產品簡介二、Encode(python->json)

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.以接口傳回成功結果:{'status': 'success', 'msg': '接口連接配接成功!'}為例,我們其實最想知道的是success這個字段傳回的是True還是False

2.如果以content位元組輸出,傳回的是一個位元組序列,這樣擷取後面那個結果就不友善了

3.如果經過json解碼後,傳回的就是一個字典,這樣擷取後面那個結果,就用字典的方式去取值

post json背景處理資料_python接口自動化-Json資料處理一、json子產品簡介二、Encode(python->json)

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/,搜尋某個單号,判斷它的狀态是不是已簽收

post json背景處理資料_python接口自動化-Json資料處理一、json子產品簡介二、Encode(python->json)

2. 實作代碼如下

post json背景處理資料_python接口自動化-Json資料處理一、json子產品簡介二、Encode(python->json)

五、參考代碼:

# coding:utf-8

import requests

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 ("未簽收")

繼續閱讀