zoukankan      html  css  js  c++  java
  • vbs 解析 json jsonp 方法

    昨天说了下用 htmlfile 来解析 html,今天依然用他来解析,htmlfile 是一个 COM 版的 BOM 和 DOM,所以解析 html, 执行 js 完全不在话下,
    今天就继续解析 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

    可以得到如下信息。

    再来看看 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

    可以得到如下信息。

    最后看下 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

    可以得到如下信息。

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

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

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

  • 相关阅读:
    Ad hoc access to OLE DB provider 'Microsoft.ACE.OLEDB.12.0' has been denied. You must access this provider through a linked server.
    阻塞问题:会话是sleeping的,但是open_tran 不是0
    windows Server DNS服务器配置
    内存缺页
    "ros::NodeHandle"的用法:全局vs.私有
    python 判断当前执行用户是否是 root 用户
    docker 安装及启动 postgresql 及navicat 连接
    Mac 在环境变量中隐藏密码或者密钥等信息
    磁盘空间不足导致虚拟机无法启动
    VirtuaBox 下安装 Centos8 无法上网
  • 原文地址:https://www.cnblogs.com/52cik/p/vbs-parse-json.html
Copyright © 2011-2022 走看看