VBA中使⽤JavaScript脚本语⾔解析JSON数据JSON:JavaScript 对象表⽰法(JavaScript Object Notation)
和xml相似,都是⽂本形式(保存在⽂本⽂件中或字符串等形式),⽐如:
jsstr = {"系别":"历史系","班级":"⼀班",
"学员":[
{"姓名":"张三","年龄":25,"性别":"男"},
{"姓名":"李四","年龄":20,"性别":"男"},
{"姓名":"⼩明","年龄":20,"性别":"⼥"}
]
}
1、{}表⽰对象,[]表⽰数组,数组的成员可以是对象,对象的属性和值⽤“属性:值”键值对形式表⽰。
本例中jsstr对象有三个属性:系别,班级,学员。其中“学员”属性的值是⼀个包含三名学员对象的数组,
2、相对XML更轻量,xml的标签⽐数据还要多。
在VBA中可以使⽤Javascript解析json对象:
先引⽤Microsoft Script Control 1.0,⽂件是:
1Sub TestJson()
2Dim jsstr As String
3
4'vb搞个字符串要加n个引号,真是烦⼈
5 jsstr = "{""系别"":""历史系"",""班级"":""⼀班""," & _
6"""学员"":[{""姓名"":""张三"",""年龄"":25,""性别"":""男""}," & _
7"{""姓名"":""李四"",""年龄"":20,""性别"":""男""}," & _
8"{""姓名"":""⼩明"",""年龄"":20,""性别"":""⼥""}" & _
9"]" & _
10"}"
11
12'前期绑定⽅便使⽤智能提⽰
13Dim scobj As New MSScriptControl.ScriptControl
14Dim age As Integer
15
16'ScriptControl使⽤的脚本语⾔。除了js,也⽀持Vbscript
17 scobj.Language = "JavaScript"
18
19'往脚本⾥添加代码,参数是字符串
20 scobj.AddCode ("var query = " & jsstr)
21
22'JSON对象获取属性的表⽰⽅法:对象.属性
23'属性的值如果是个包含多个对象的数组,可以使⽤索引表⽰取得对象:对象.属性[0]
24'Eval是表达式求值
25 age = scobj.Eval("query.学员[2].年龄")
26
27 Debug.Print "历史系⼀班的第3个学员的年龄是" & age & "岁"
28
29End Sub
1、javascript是弱类型语⾔。定义变量的关键字是var
var x;
var y = 10 ;
js脚本开发
var name = "张三" ;
2、Eval是表达式求值,参数是字符串,如果是解析⼀个JSON对象,最好是使⽤⼀对括号把⽂本包括住,这样可以避免语法错误。var obj = eval ("(" + jsstr + ")");
3、CodeObject⽅法,暴露脚本对象给VB。(这个⽅法没摸透)
1Sub TestJson2()
2Dim jsstr1 As String
3Dim jsstr2 As String
4 jsstr1 = "{""姓名"":""张三"",""性别"":""男""}"
5 jsstr2 = "{""姓名"":""⼩花"",""性别"":""⼥""}"
6
7Dim scobj As New MSScriptControl.ScriptControl
8 scobj.Language = "JavaScript"
9 scobj.AddCode ("var query1 = " & jsstr1)    'query1,query2分别是两个Javascript对象
10 scobj.AddCode ("var query2 = " & jsstr2)
11 'CallByName分别取出CodeObject中的query1、query2对象,并到姓名属性的值
12 Debug.Print CallByName(CallByName(scobj.CodeObject, "query1", VbGet), "姓名", VbGet)
13 Debug.Print CallByName(CallByName(scobj.CodeObject, "query2", VbGet), "姓名", VbGet)
14
15End Sub
CallByName是VB中的⽅法。
通过本地窗⼝可以看到scobj对象和内部的codeobject

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。