昨天说了下用 htmlfile 来解析 html,今天依然用他来解析,htmlfile 是一个 COM 版的 BOM 和 DOM,所以解析 html, 执行 js 完全不在话下,
今天就继续解析 json 和 jsonp 吧。

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

先来看看常见的三种吧:
酷我音乐用户信息 ,"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 才是王道。

vbs 解析 json jsonp 方法的更多相关文章

  1. .NET下解析Json的方法

    .NET下几种常见的解析JSON方法 主要类 命名空间 限制 内建LINQ支持 DataContractJsonSerializer System.Runtime.Serialization.Json ...

  2. 再次提供一个纯粹通过pl/sql解析json的方法。

    在github上面有一个叫pljson的项目,该项目就是用pl/sql 来解析json的. 项目地址:pljson(需翻|强),如果翻不了强的同学,我在国内克隆了一个副本,不定期同步更新 pljson ...

  3. JavaScript转换与解析JSON的方法

    在JavaScript中将JSON的字符串解析成JSON数据格式,一般有两种方式: 一种为使用eval()函数. 使用Function对象来进行返回解析. 使用eval函数来解析,jquery的eac ...

  4. 解析json的方法

    解析json的两种方法:JS中的eval().JSON.parse eval不仅解析内容还会解析其中的方法,JSON.parse解析更安全.JSONLint可校验json的错误.

  5. Java创建和解析Json数据方法(五)——Google Gson包的使用

    (五)Google Gson包的使用 1.简介 Gson包中,使用最多的是Gson类的toJson()和fromJson()方法:         ①toJson():将java对象转化为json数据 ...

  6. Java创建和解析Json数据方法(四)——json-lib包的使用

    (四)json-lib包的使用         既然json-lib包比org.json包重量级,那么json-lib包肯定有很多org.json包没有的类和方法,这篇笔记简单记录json-lib包中 ...

  7. Java创建和解析Json数据方法(三)——json-lib包的使用

    (三)json-lib包的使用         这篇笔记主要介绍json-lib包的创建和解析json数据的方式,主要是的JSONObject.JSONArray和Java对象:beans, maps ...

  8. Java创建和解析Json数据方法(二)——org.json包的使用

    (二)org.json包的使用 1.简介   工具包org.json.jar,是一个轻量级的,JAVA下的json构造和解析工具包,它还包含JSON与XML, HTTP headers, Cookie ...

  9. Java创建和解析Json数据方法——org.json包的使用(转)

    org.json包的使用 1.简介   工具包org.json.jar,是一个轻量级的,JAVA下的json构造和解析工具包,它还包含JSON与XML, HTTP headers, Cookies, ...

随机推荐

  1. Few-Shot/One-Shot Learning

    Few-Shot/One-Shot Learning指的是小样本学习,目的是克服机器学习中训练模型需要海量数据的问题,期望通过少量数据即可获得足够的知识. Matching Networks for ...

  2. PHP 多进程开发

    pcntl_fork(); https://blog.csdn.net/wujiangwei567/article/details/77006724 https://blog.csdn.net/qq_ ...

  3. 使用pt-query-digest,找到不是很合适的sql

    pt-query-digest 1.  概述 索引可以我们更快速的执行查询,但是肯定存在不合理的索引,如果想找到那些索引不是很合适的查询,并在它们成为问题前进行优化,则可以使用pt-query-dig ...

  4. [转帖]剖析淘宝TDDL(TAOBAO DISTRIBUTE DATA LAYER)

    剖析淘宝TDDL(TAOBAO DISTRIBUTE DATA LAYER) 博客分类: 原博客地址: http://qq85609655.iteye.com/blog/2035176 distrib ...

  5. 抽奖系统 random()

    random() 方法可返回介于 0 ~ 1 之间的一个随机数. document.write(parseInt(10*Math.random())); //输出0-10之间的随机整数document ...

  6. Power Strings POJ - 2406(next水的一发 || 后缀数组)

    后缀数组专题的 emm.. 就next 循环节../ 有后缀数组也可以做 从小到大枚举长度i,如果长度i的子串刚好是重复了len/i次,应该满足len % i == 0和rank[0] - rank[ ...

  7. Visual Studio 2013中UML建模功能

    1.新建项目-->模版-->建模项目 2.右键项目,添加新建项,, 3.自己摸索吧.

  8. BZOJ3192:[JLOI2013]删除物品——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=3192 箱子再分配问题需要解决如下问题: (1)一共有N个物品,堆成M堆. (2)所有物品都是一样的 ...

  9. SSM 小demo的盲点总结

    日期Date和String之间的转换: 1. 全局转换器(推荐使用) 1. 创建类实现Converter接口,实现Convert方法 public class StringToDateConvert ...

  10. 洛谷P3994 Highway(树形DP+斜率优化+可持久化线段树/二分)

    有点类似NOI2014购票 首先有方程$f(i)=min\{f(j)+(dep_i-dep_j)*p_i+q_i\}$ 这个显然是可以斜率优化的... $\frac {f(j)-f(k)}{dep_j ...