欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

vbs 解析json jsonp的方法

程序员文章站 2022-03-07 15:25:24
我收集了三种常见 json jsonp 的格式,因为很多人找我说如何用正则提取某个字符串,我看了下,要么是json,要么是jsonp, 正则简直浪费,比如那种空间里说说的...

我收集了三种常见 json jsonp 的格式,因为很多人找我说如何用正则提取某个字符串,我看了下,要么是json,要么是jsonp,
正则简直浪费,比如那种空间里说说的数据,上百条的信息,你正则个p,而且还有回复里的格式也差不多的,所以最好的方法还是解析。

先来看看常见的三种吧:

酷我音乐用户信息 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:'中国联通',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 ' 得到数据

set window = html.parentwindow
window.execscript "var json = " & strhtml, "jscript" ' 解析 json

set kuwo = window.json ' 获取解析后的对象
wscript.echo "访问量:", kuwo.view, " 财富:", kuwo.fortune

可以得到如下信息。

vbs 解析json jsonp的方法

再来看看 jsonp 的解析,jsonp其实只是多了一个回调函数而已,所以我们自定义一个函数解析他就可以了。

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 ' 得到数据
' cb({mobile:'13012345678',province:'重庆',isp:'中国联通',stock:'1',amount:'10000',maxprice:'0',minprice:'0'});
' <!--[if !ie]>|xgv00|8030d7c308afc4a32846a715ff79e9a3<![endif]-->
' 得到的是这样的数据,所以要处理下
strhtml = split(strhtml, vblf)(0) ' 取第一行
set window = html.parentwindow
window.execscript "function " & callback & "(o){json=o}", "jscript" ' jsonp 回调函数、
window.execscript strhtml, "jscript" ' 解析 json

set json = window.json ' 获取解析后的对象
wscript.echo json.mobile, json.isp, json.province 

可以得到如下信息。
vbs 解析json jsonp的方法

最后看下 js 格式解析,这个是最简单的,什么都不用做,但是你要知道他的变量名。

set html = createobject("htmlfile")
set http = createobject("msxml2.serverxmlhttp")

http.open "get", "http://pv.sohu.com/cityjson", false
http.send
strhtml = http.responsetext ' 得到数据
' 得到 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 

可以得到如下信息

vbs 解析json jsonp的方法

js 格式的是最简单的,但要注意,变量名是他定的,所以你在 获取解析后的对象 那一步,要写上他的变量名。
json 格式,我们只要给他加上变量名然后解析即可。
jsonp 相对麻烦点,因为要写一个自定义回调函数。

总的来说,方法差不多,只是解析部分稍微有点不同而已。
用 htmlfile 解析,是不是比 正则 方便?

以后玩 post 别再用落伍的 instr+mid 或者 正则 去解析 html json了, htmlfile 才是王道。