首页 > 其他分享 >vba解析JSON字符串

vba解析JSON字符串

时间:2022-11-19 10:02:39浏览次数:39  
标签:oWindow vba Set 对象 jstr JSON 字符串

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

3、使用split函数解析json字符串:此方法是分割字符串

4、使用instr函数解析json字符串:此方法查找获取需要的字符串

标签:oWindow,vba,Set,对象,jstr,JSON,字符串
From: https://www.cnblogs.com/yiblue/p/16905500.html

相关文章