vbs 解析json jsonp的方法
我收集了三種常見 json jsonp 的格式,因為很多人找我說如何用正則提取某個字符串,我看了下,要么是json,要么是jsonp,
正則簡直浪費,比如那種空間里說說的數(shù)據(jù),上百條的信息,你正則個P,而且還有回復(fù)里的格式也差不多的,所以最好的方法還是解析。
先來看看常見的三種吧:
酷我音樂用戶信息 json 格式
http://kzone.kuwo.cn/mlog/UserVal?uid=1237357&from=profile
{"work":4,"fans":275,"lp":"{\"id\":1237357,\"username\":\"亂碼\",\"pic\":\"http://img3.kuwo.cn/star/userhead/57/55/1315554310390_1237357m.jpg\"}","art":4,"album":1,"fortune":342402,"article":0,"workVideo":1,"care":195,"workAudio":3,"view":1312997,"playlist":0,"listen":278962,"collect":1}
拍拍手機查詢接口 jsonp 格式
http://virtual.paipai.com/extinfo/GetMobileProductInfo?mobile=13012345678&amount=10000&callname=cb
cb({mobile:'13012345678',province:'重慶',isp:'中國聯(lián)通',stock:'1',amount:'10000',maxprice:'0',minprice:'0'});
搜狐IP信息 js 格式
http://pv.sohu.com/cityjson
var returnCitySN = {"cip": "218.72.14.14", "cid": "330100", "cname": "浙江省杭州市"};
這幾種合適都可以通過 htmlfile 來解析,但是方法稍微有點差異。
先來解析第一種 json 格式的吧。
Set html = CreateObject("htmlfile")
Set http = CreateObject("Msxml2.ServerXMLHTTP")
http.open "GET", "http://kzone.kuwo.cn/mlog/UserVal?uid=1237357&from=profile", False
http.send
strHtml = http.responseText ' 得到數(shù)據(jù)
Set window = html.parentWindow
window.execScript "var json = " & strHtml, "JScript" ' 解析 json
Set kuwo = window.json ' 獲取解析后的對象
WScript.Echo "訪問量:", kuwo.view, " 財富:", kuwo.fortune
可以得到如下信息。

再來看看 jsonp 的解析,jsonp其實只是多了一個回調(diào)函數(shù)而已,所以我們自定義一個函數(shù)解析他就可以了。
Set html = CreateObject("htmlfile")
Set http = CreateObject("Msxml2.ServerXMLHTTP")
callback = "cb"
url = "http://virtual.paipai.com/extinfo/GetMobileProductInfo?mobile=13012345678&amount=10000&callname=" & callback
http.open "GET", url, False
http.send
strHtml = http.responseText ' 得到數(shù)據(jù)
' cb({mobile:'13012345678',province:'重慶',isp:'中國聯(lián)通',stock:'1',amount:'10000',maxprice:'0',minprice:'0'});
' <!--[if !IE]>|xGv00|8030d7c308afc4a32846a715ff79e9a3<![endif]-->
' 得到的是這樣的數(shù)據(jù),所以要處理下
strHtml = Split(strHtml, vbLf)(0) ' 取第一行
Set window = html.parentWindow
window.execScript "function " & callback & "(o){json=o}", "JScript" ' jsonp 回調(diào)函數(shù)、
window.execScript strHtml, "JScript" ' 解析 json
Set json = window.json ' 獲取解析后的對象
WScript.Echo json.mobile, json.isp, json.province
可以得到如下信息。

最后看下 js 格式解析,這個是最簡單的,什么都不用做,但是你要知道他的變量名。
Set html = CreateObject("htmlfile")
Set http = CreateObject("Msxml2.ServerXMLHTTP")
http.open "GET", "http://pv.sohu.com/cityjson", False
http.send
strHtml = http.responseText ' 得到數(shù)據(jù)
' 得到 var returnCitySN = {"cip": "218.72.14.14", "cid": "330100", "cname": "浙江省杭州市"};
Set window = html.parentWindow
window.execScript strHtml, "JScript" ' 解析 js
Set js = window.returnCitySN ' 獲取解析后的對象
WScript.Echo js.cname, js.cip, js.cid
可以得到如下信息

js 格式的是最簡單的,但要注意,變量名是他定的,所以你在 獲取解析后的對象 那一步,要寫上他的變量名。
json 格式,我們只要給他加上變量名然后解析即可。
jsonp 相對麻煩點,因為要寫一個自定義回調(diào)函數(shù)。
總的來說,方法差不多,只是解析部分稍微有點不同而已。
用 htmlfile 解析,是不是比 正則 方便?
以后玩 POST 別再用落伍的 instr+mid 或者 正則 去解析 html json了, htmlfile 才是王道。
相關(guān)文章
VBS教程:函數(shù)-ScriptEngineMajorVersion 函數(shù)
VBS教程:函數(shù)-ScriptEngineMajorVersion 函數(shù)...2006-11-11
reg2vbs.vbs 將Reg文件轉(zhuǎn)換為VBS文件保存 腳本之家修正版本
可以將Reg文件轉(zhuǎn)換為VBS文件保存的代碼,網(wǎng)上的好多都有問題,本地特給修正了一下,有問題,請回復(fù)。2009-05-05
ActiveX部件不能創(chuàng)建對象:dm.dmsoft代碼:800A01AD
vbs調(diào)用插件報:ActiveX部件不能創(chuàng)建對象,代碼:800A01AD,一般是因為病毒導(dǎo)致dll文件丟失或者64系統(tǒng)問題導(dǎo)致,需要的朋友可以參考下2019-12-12
VBS實現(xiàn)的系統(tǒng)服務(wù)備份優(yōu)化代碼
將下面代碼保存為VBS執(zhí)行即可,服務(wù)優(yōu)化規(guī)則可以自由修改(上面是我現(xiàn)在使用的優(yōu)化規(guī)則),并且每次優(yōu)化都會在我的文檔里面生成一個對應(yīng)日期的服務(wù)備份文件.可以直接還原2013-01-01
用vbscript實現(xiàn)修改屏幕保護的等待時間長度
用vbscript實現(xiàn)修改屏幕保護的等待時間長度...2007-04-04
VBS教程:VBScript 語句-Randomize 語句
VBS教程:VBScript 語句-Randomize 語句...2006-11-11
VBS InternetExplorer.Application的屬性和方法介紹
V這篇文章主要是介紹vBS InternetExplorer.Application 屬性和方法,需要的朋友可以參考一下2009-07-07
使用批處理文件異地備份數(shù)據(jù)庫(最近幾天的數(shù)據(jù))
數(shù)據(jù)庫異地備份對一個網(wǎng)站來說是非常必要的,這里談一下使用批處理文件對數(shù)據(jù)庫異地本份的過程2006-06-06

