CreateObject(“htmlfile“)如何使用JSON.stringif

本文讲述了如何在VBA中通过HTMLFile对象和ScriptControl对象来解析JSON字符串,提供示例代码以提取和访问JSON数据
摘要由CSDN通过智能技术生成

vba解析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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值