You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在VBS中访问createObject("htmlfile")返回的JSON对象

VBScript访问JScript解析的JSON数组元素的解决方案

你当前用htmlfile对象的JScript引擎解析JSON后,能获取数组的length属性,但无法直接用VBScript语法访问数组元素,核心原因是JScript数组和VBScript数组的对象模型不兼容——JScript数组不是VBScript可直接遍历/索引的SafeArray类型,需要做适配处理。

以下是两种可行的解决方法:

方法1:给JScript数组添加VBScript可调用的获取方法

在解析JSON的JScript代码中,给数组注入getItem方法,让VBScript能通过该方法索引元素:

Function parseJson(strJson)
    Dim html, window
    Set html = WScript.CreateObject("htmlfile")
    Set window = html.parentWindow
    
    ' 注入JScript代码:解析JSON并给数组添加getItem方法
    window.execScript "var json = " & strJson & "; " & _
                      "// 给一维数组添加getItem方法" & _
                      "function addGetItem(arr) { " & _
                      "    arr.getItem = function(index) { " & _
                      "        var item = this[index]; " & _
                      "        // 如果是嵌套数组,递归添加方法" & _
                      "        if (Array.isArray(item)) addGetItem(item); " & _
                      "        return item; " & _
                      "    }; " & _
                      "} " & _
                      "addGetItem(json.columns); " & _
                      "addGetItem(json.data);", "JScript"
    
    Set parseJson = window.json
End Function

' 调用示例
Dim JSON, jsonText
jsonText = "{""columns"":[""b_summary"",""end_fy"",""id"",""isin"",""market"",""name"",""num_employees"",""sector"",""ticker""],""data"":[[""Microsoft Corp is a technology company. "",6,59265,""US5949181045"",1,""MICROSOFT CORP"",166475,101003,""MSFT""]]}"

Set JSON = ParseJson(jsonText)
WScript.Echo JSON.columns.length & " columns"
WScript.Echo JSON.data.length & " rows"

' 访问数组元素
WScript.Echo "第二个列名:" & JSON.columns.getItem(1) ' 输出end_fy
WScript.Echo "第一行第一列数据:" & JSON.data.getItem(0).getItem(0) ' 输出Microsoft Corp...

方法2:将JScript数组转换为VBScript兼容数组

利用JScript的VBArray对象,把JScript数组转换为VBScript可直接索引的SafeArray:

Function parseJson(strJson)
    Dim html, window
    Set html = WScript.CreateObject("htmlfile")
    Set window = html.parentWindow
    
    ' 注入JScript代码:解析JSON并转换为VBScript数组
    window.execScript "var json = " & strJson & "; " & _
                      "// 递归转换嵌套数组为VBScript数组" & _
                      "function toVBSArray(arr) { " & _
                      "    var vbArr = new VBArray(arr).toArray(); " & _
                      "    for (var i = 0; i < vbArr.length; i++) { " & _
                      "        if (Array.isArray(vbArr[i])) { " & _
                      "            vbArr[i] = toVBSArray(vbArr[i]); " & _
                      "        } " & _
                      "    } " & _
                      "    return vbArr; " & _
                      "} " & _
                      "json.columns = toVBSArray(json.columns); " & _
                      "json.data = toVBSArray(json.data);", "JScript"
    
    Set parseJson = window.json
End Function

' 调用示例
Dim JSON, jsonText
jsonText = "{""columns"":[""b_summary"",""end_fy"",""id"",""isin"",""market"",""name"",""num_employees"",""sector"",""ticker""],""data"":[[""Microsoft Corp is a technology company. "",6,59265,""US5949181045"",1,""MICROSOFT CORP"",166475,101003,""MSFT""]]}"

Set JSON = ParseJson(jsonText)
' VBScript数组用UBound获取最大索引,元素数量为UBound+1
WScript.Echo UBound(JSON.columns) + 1 & " columns"
WScript.Echo UBound(JSON.data) + 1 & " rows"

' 直接用VBScript数组语法访问
WScript.Echo "第二个列名:" & JSON.columns(1) ' 输出end_fy
WScript.Echo "第一行第一列数据:" & JSON.data(0)(0) ' 输出Microsoft Corp...

两种方法都能解决你的问题,方法1保留JScript数组的原生特性,方法2更贴合VBScript的使用习惯,可根据需求选择。

内容的提问来源于stack exchange,提问作者alfadog67

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 19:23:04