python 自动上报json信息_python接口自动化5-Json数据处理
前言
有些post的請(qǐng)求參數(shù)是json格式的,這個(gè)前面第二篇post請(qǐng)求里面提到過,需要導(dǎo)入json模塊處理。
一般常見的接口返回?cái)?shù)據(jù)也是json格式的,我們?cè)谧雠袛鄷r(shí)候,往往只需要提取其中幾個(gè)關(guān)鍵的參數(shù)就行,這時(shí)候就需要json來解析返回的數(shù)據(jù)了。
一、json模塊簡(jiǎn)介
1.Json簡(jiǎn)介:Json,全名 JavaScript Object Notation,是一種輕量級(jí)的數(shù)據(jù)交換格式,常用于http請(qǐng)求中
2.可以用help(json),查看對(duì)應(yīng)的源碼注釋內(nèi)容
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,并且區(qū)分大小寫,這就尷尬了,明明都是bool值。
在python里面寫的代碼,傳到j(luò)son里,肯定識(shí)別不了,所以需要把python的代碼經(jīng)過encode后成為json可識(shí)別的數(shù)據(jù)類型。
2.舉個(gè)簡(jiǎn)單例子,下圖中dict類型經(jīng)過json.dumps()后變成str,True變成了true,False變成了fasle
3.以下對(duì)應(yīng)關(guān)系表是從json模塊的源碼里面爬出來的.python的數(shù)據(jù)類,經(jīng)過encode成json的數(shù)據(jù)類型,對(duì)應(yīng)的表如下 ???? |? | Python????????????? | JSON????????? | ???? |? +===================+===============+ ???? |? | dict??????????? ? ??? | object??????? | ???? |? +-------------- -----+---------------+ ???? |? | list, tuple???? ? ?? | array???????? | ???? |? +-------------------+---------------+ ???? |? | str, unicode????? | string??????? | ???? |? +-------------------+---------------+ ???? |? | int, long, float? | number??????? | ???? |? +-------------------+---------------+ ???? |? | True?????????? ?? ? | true????????? | ???? |? +-------------------+---------------+ ???? |? | False???????????? | false???????? | ???? |? +-------------------+---------------+ ???? |? | None????????????? | null????????? | ???? |? +-------------------+---------------+
三、decode(json->python)
1.以第三篇的登錄成功結(jié)果:{"success":true}為例,我們其實(shí)最想知道的是success這個(gè)字段返回的是True還是False
2.如果以content字節(jié)輸出,返回的是一個(gè)字符串:{"success":true},這樣獲取后面那個(gè)結(jié)果就不方便了
3.如果經(jīng)過json解碼后,返回的就是一個(gè)字典:{u'success': True},這樣獲取后面那個(gè)結(jié)果,就用字典的方式去取值:result2["success"]
4.同樣json數(shù)據(jù)轉(zhuǎn)化成python可識(shí)別的數(shù)據(jù),對(duì)應(yīng)的表關(guān)系如下
|? +---------------+-------------------+ ???? |? | JSON???????? ? ? ? | Python??????????? | ???? |? +===============+===================+ ???? |? | object?????? ? ? ? | dict????????????? | ???? |? +---------------+-------------------+ ???? |? | array??????? ? ? ?? | list????????????? | ???? |? +---------------+-------------------+ ???? |? | string????????????? | unicode?????????? | ???? |? +---------------+-------------------+ ???? |? | number (int)??? | int, long???????? | ???? |? +---------------+-------------------+ ???? |? | number (real)?? | float???????????? | ???? |? +---------------+-------------------+ ???? |? | true??????????????? | True????????????? | ???? |? +---------------+-------------------+ ???? |? | false??????? ? ? ?? | False???????????? | ???? |? +---------------+-------------------+ ???? |? | null???????? ? ? ? ? | None????????????? | ???? |? +---------------+-------------------+
四、案例分析
1.比如打開快遞網(wǎng):http://www.kuaidi.com/,搜索某個(gè)單號(hào),判斷它的狀態(tài)是不是已簽收
2. 實(shí)現(xiàn)代碼如下
五、參考代碼:
# 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方法其它加個(gè)ser-Agent就可以了
s = requests.session() r = s.get(url, headers=headers,verify=False) result = r.json() data = result["data"]?? # 獲取data里面內(nèi)容 print data print data[0]???????? # 獲取data里最上面有個(gè) get_result = data[0]['context']? # 獲取已簽收狀態(tài) print get_result
if u"已簽收" in get_result: ??? print "快遞單已簽收成功" else: ??? print "未簽收"
總結(jié)
以上是生活随笔為你收集整理的python 自动上报json信息_python接口自动化5-Json数据处理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android资产目录,android
- 下一篇: python bytes转换为strin