昨天说了下用 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. 虚拟机VMware中的CentOS字符界面和图形界面切换

    在虚拟机中安装CentOS后展示的界面是图形用户界面,想切换到命令模式,于是查了linux下切换模式的方法,可是按了ctrl+alt+f1.f2....f7都是没用,后来发现是因为按键冲突的原因 问题 ...

  2. curl 实例详解

    使用PHP的cURL库可以简单和有效地去抓网页.你只需要运行一个脚本,然后分析一下你所抓取的网页,然后就可以以程序的方式得到你想要的数据 了.无论是你想从从一个链接上取部分数据,或是取一个XML文件并 ...

  3. BugScan插件编写高(gǎo)级(jī)教程

    声明:本文最先发布在:http://q.bugscan.net/t/353 转载请注明出处 有问题可以和我交流 邮件(Medici.Yan@gmail.com) 个人博客地址:http://www.c ...

  4. C# 字符串多行显示、文本换行

    以textbox为例 ①:先设置textbox的属性Multiline为true ②:组织好显示字符串:FistLine(第一行要显示的字符).SecondLine(第二行要显示的字符)....... ...

  5. Collection List区别

    Collection是无序的,比如一大群人在广场上,你不可能说某某人是第一个,某某人是第二个 List是有序的,比如一群人从高到矮排了队,你就能说这人是第一个,这人是最后一个 因此Collection ...

  6. Mysql 数据锁与事务

    一.锁 常用命令 查看表的存储引擎:mysql> show create table myLock; 修改当前表的存储引擎:mysql> alter table myLock engine ...

  7. SpringBoot(五)_表单验证

    SpringBoot(五)_表单验证 参数校验在我们日常开发中非常常见,最基本的校验有判断属性是否为空.长度是否符合要求等,在传统的开发模式中需要写一堆的 if else 来处理这些逻辑,很繁琐,效率 ...

  8. js获取元素到屏幕左上角的距离

    开发过程中经常会遇到 获取元素到屏幕左上角的距离, 当我们使用jQuery开发时,我们可以使用 $.offset()来获取准确的距离. 如果我们的项目中并没有引入jQuer的话,跟希望通过原生方法实现 ...

  9. python爬虫headers设置后无效解决方案

    此次遇到的是一个函数使用不熟练造成的问题,但有了分析工具后可以很快定位到问题(此处推荐一个非常棒的抓包工具fiddler) 正文如下: 在爬取某个app数据时(app上的数据都是由http请求的),用 ...

  10. Palindrome Number - LeetCode

    目录 题目链接 注意点 解法 小结 题目链接 Palindrome Number - LeetCode 注意点 负数肯定是要return false的 数字的位数要分奇数和偶数两种情况 解法 解法一: ...