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

VBA解析JSON出现运行时错误'9'(下标越界)求助

VBA JSON解析脚本下标越界错误排查与修复

问题概述

本地运行正常的VBA JSON解析脚本,在另一台机器执行时,于ParseArr(key$)函数的Select Case token(p)语句触发运行时错误'9':下标越界。

核心原因分析

  1. Tokenize函数解析异常
    token数组由Tokenize(JSON)生成,若该函数未正确处理目标JSON(比如特殊字符、不规范空格/换行、编码差异),会导致生成的token数组长度不足,循环中p递增后超出数组下标范围。

  2. 循环无边界检查
    ParseArr和ParseObj的Do Loop未添加p是否超出token数组上限的判断,一旦JSON格式不规范或Tokenize解析错误,p会持续递增直至越界。

  3. 重复分支逻辑失效
    ParseObj函数中存在两个重复的Case "{":分支,第二个分支永远不会被执行,导致空对象{}的处理逻辑失效,可能引发后续p的错误递增。

修复与排查步骤

  • 补全Tokenize函数并验证
    你未提供Tokenize函数代码,这是问题关键。需确保该函数能正确解析所有合法JSON:

    • 处理字符串中的转义字符(如\"、\\)
    • 兼容不同的空格、换行符
    • 正确识别JSON的结构符号({、}、[、]、:、,)
  • 修复重复的Case分支
    修改ParseObj中的重复Case "{":,整合逻辑:

    Case "{":
        If token(p + 1) = "}" Then
            p = p + 1
            dic.Add key, "null"
        Else
            ParseObj key
        End If
    

    删除原第一个单独的Case "{": ParseObj key分支

  • 添加循环边界检查
    在ParseArr和ParseObj的循环开头添加越界判断,避免p超出数组范围:
    以ParseArr为例:

    Function ParseArr(key$)
        Dim e&
        Do
            p = p + 1
            ' 添加边界检查
            If p > UBound(token) Then Exit Do
            Select Case token(p)
                ' 原分支逻辑...
            End Select
        Loop
    End Function
    

    ParseObj函数同理添加该检查。

  • 验证目标JSON的合法性
    将触发错误的JSON拿到本地测试,确认是否存在语法错误(如缺少闭合符号、不规范字符串),或编码问题(如非UTF-8编码导致解析乱码)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 18:24:26