vba解析JSON字符串
vba解析JSON大概有4种方法
1、htmlfile对象解析json(支持32位和64位系统)
思路:创建htmlfile对象,使用write方法写入浏览器版本,创建parentwindow对象,在使用execscript对象执行js代码,使用eval对象根据属性名获取属性值
'封装提取JSON的函数,可复制函数到vba中,直接调用函数名
Function getJsonAttribute(jsonstr, expre As String) 'expre填写规则:【jstr.属性名...】,jstr是根对象,可以不需要填写,直接【属性...】
Dim oHtml As Object
'定义HtmlDocument对象
Set oHtml = CreateObject("htmlfile")
'设置IE浏览器版本
oHtml.write "<meta http-equiv='X-UA-Compatible'content='IE=8'\>"
Dim oWindow, s01, s02, s03 As Object
Set oWindow = oHtml.parentWindow
With oWindow
.execScript "var jstr=" & jsonstr'将json字符串加入js代码中,声明变量jstr
End With
'Set s01 = oWindow.eval("JSON.stringify(jstr,null,2)")
'Dim s04 As String
's04 = oWindow.eval("JSON.stringify(jstr,null,2)")
'Debug.Print s04
'Set s03 = oWindow.arr03
getJsonAttribute = oWindow.eval("jstr." & expre)'属性值表达式,获取值赋给函数返回
Set oHtml = Nothing
Set oWindow = Nothing
End Function
2、ScriptControl对象解析json
这里代码引用网友的帖子
Sub TestJson()
Dim jsstr As String
'vb搞个字符串要加n个引号,真是烦人
jsstr = "{""系别"":""历史系"",""班级"":""一班""," & _
"""学员"":[{""姓名"":""张三"",""年龄"":25,""性别"":""男""}," & _
"{""姓名"":""李四"",""年龄"":20,""性别"":""男""}," & _
"{""姓名"":""小明"",""年龄"":20,""性别"":""女""}" & _
"]" & _
"}"
Dim age As Integer
Set scobj = CreateObject("ScriptControl")
'调用MSScriptControl.ScriptControl对象将提取的变量文本运算形成对象集合
'ScriptControl使用的脚本语言。除了js,也支持Vbscript
scobj.Language = "JavaScript"
'往脚本里添加代码,参数是字符串
scobj.AddCode ("var query = " & jsstr)
'JSON对象获取属性的表示方法:对象.属性
'属性的值如果是个包含多个对象的数组,可以使用索引表示取得对象:对象.属性[0]
'Eval是表达式求值
age = scobj.Eval("query.学员[2].年龄")
Debug.Print "历史系一班的第3个学员的年龄是" & age & "岁"
End Sub