用VBS解析JSON格式数据

标签: , , , ,

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition – December 1999的一个子集。JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。

更多关于JSON的介绍请访问 http://www.json.org/json-zh.html

在Google Code上有一个aspjson项目,但是这个项目是用VBS来生成JSON格式的数据,而不是用VBS来解析JSON格式数据。我Google来Google去也没找到现成的能够解析JSON的VBS代码。

解决的方法有三个:第一,根据算法自己写一个解析JSON的库;第二,使用正则表达式匹配需要的数据;第三,用JavaScript来解析。我是很懒的人,第一种方法我肯定是不会用的,用正则表达式似乎不错,但是缺乏灵活性。既然JSON是专门为JavaScript设计的,当然用JavaScript来解析最简单。于是,一切又回到了无所不能的ScriptControl。

为了测试,先写一个简单的PHP,PHP手册上json_encode函数的示例程序:

<?php
$arr = array('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
echo json_encode($arr);
?>

然后用VBS解析:

'Author: Demon
'Website: https://demon.tw
'E-mail: 380401911@qq.com
Dim http
Set http = CreateObject("Msxml2.XMLHTTP")
http.open "GET", "https://demon.tw/test/json.php", False
http.send
str = http.responseText
WScript.Echo str
ParseJson str

Sub ParseJson(str)
    Dim sc
    Set sc = CreateObject("MSScriptControl.ScriptControl")
    sc.Language = "JScript"
    sc.AddCode "var o = " & str & ";"
    a =  sc.Eval("o.a")
    b =  sc.Eval("o.b")
    c =  sc.Eval("o.c")
    d =  sc.Eval("o.d")
    e =  sc.Eval("o.e")
    WScript.Echo a, b, c, d, e
End Sub

复杂的例子就不举了,我没有时间,自己举一反三吧。

赞赏

微信赞赏支付宝赞赏

随机文章:

  1. Chrome新标签页无法打开问题的解决
  2. 改变IE查看源文件默认程序的方法
  3. PT作弊的几种方法
  4. JavaScript调用VBS中的InputBox和MsgBox函数
  5. 批处理技术内幕:IF命令

7 条评论 发表在“用VBS解析JSON格式数据”上

  1. Firefly说道:

    路过,菜鸟膜拜大牛!
    虽然我对算法知之甚少,但也算开了眼界,原来VBS可以做这么多事!

  2. ddd说道:

    任何脚本语言支持COM后,就是万能的了。比如ahk au3 按键 ………………

  3. lonely说道:

    正在思考到这个问题,差点就正则匹配字符串来搞了,刚好看到你这篇文章,及时啊

  4. […] 曾经写过一篇《用VBS解析JSON格式数据》,里面提到了用 VBS 解析 JSON 的三种方法::第一,根据算法自己写一个解析 JSON 的库;第二,使用正则表达式匹配需要的数据;第三,用 JavaScript 来解析。 […]

  5. xiaming说道:

    http://www.json.org上面有各语言的json函数啊。
    vbsEdit5.5.2的64位有没有破解?

  6. 天天说道:

    64位office无法使用MSScriptControl.ScriptControl

    • 地地说道:

      你说得没错,偶见网上有64位MSWinsck.OCX,实际也无法创建MSScriptControl.ScriptControl对i象。

留下回复