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

Visual Basic解析嵌套JSON文件:如何提取指定字段?

问题:VBA中提取嵌套JSON特定字段失败,该如何修正?

我的嵌套JSON结构

{ 
  "root": [
    { 
      "STATUS_RE": { 
        "STATUS": { 
          "STATUS": { 
            "OWNER": "Manny", 
            "REQUEST_ID": "00000", 
            "STATE": "SUCCESS" 
          } 
        }, 
        "RESPONSE_FORMAT": "New", 
        "OWNER": "Manny", 
        "REQUEST_ID": "00000", 
        "RESULT": [
          { 
            "USER": { 
              "BUSINESS_ID": "N", 
              "ID_NUMBER": "016", 
              "U_LANGUAGE": "F", 
              "B_CODE": "08302" 
            } 
          }, 
          { 
            "USER_A": { 
              "ROLE": "true", 
              "ACCESSING": "true" 
            } 
          }
        ] 
      }
    } 
  ] 
}

我尝试的VBA代码

Dim FSO As New FileSystemObject
Dim JsonTS As TextStream
Set JsonTS = FSO.OpenTextFile("example.json", ForReading)
JsonText = JsonTS.ReadAll
JsonTS.Close
Set JSON = ParseJson(JsonText)
i = 2
For Each Item In JSON
    Sheets(1).Cells(i, 1).Value = Item("BUSINESS_ID")
    Sheets(1).Cells(i, 2).Value = Item("ID_Number")
    i = i + 1

问题分析与解决方案

你的问题核心是没理清JSON的嵌套层级,还有字段大小写不匹配的小细节(比如你代码里写的ID_Number和JSON里的ID_NUMBER不一致)。咱们一步步拆解这个结构,把需要的字段精准捞出来:

  1. 最外层的root是数组,而且只有一个元素,所以要先取JSON("root")(1)(VBA里ParseJson返回的数组是从1开始索引的,不是0)
  2. 接着进入STATUS_RE对象,再定位到存放目标数据的RESULT数组
  3. RESULT里的第一个元素是USER对象,第二个是USER_A对象,需要分别提取字段

修改后的完整VBA代码

Dim FSO As New FileSystemObject
Dim JsonTS As TextStream
Dim JsonText As String
Dim JSON As Object
Dim rootItem As Object
Dim resultArray As Object
Dim userObj As Object
Dim userAObj As Object
Dim i As Integer

' 读取JSON文件内容
Set JsonTS = FSO.OpenTextFile("example.json", ForReading)
JsonText = JsonTS.ReadAll
JsonTS.Close

' 解析JSON字符串为对象
Set JSON = ParseJson(JsonText)

' 逐层定位到目标数据所在的层级
Set rootItem = JSON("root")(1)
Set resultArray = rootItem("STATUS_RE")("RESULT")

' 提取USER下的BUSINESS_ID和ID_NUMBER
Set userObj = resultArray(1)("USER")
i = 2
Sheets(1).Cells(i, 1).Value = userObj("BUSINESS_ID")
Sheets(1).Cells(i, 2).Value = userObj("ID_NUMBER") ' 注意和JSON字段大小写完全匹配
i = i + 1

' 提取USER_A下的ROLE字段
Set userAObj = resultArray(2)("USER_A")
Sheets(1).Cells(i, 1).Value = "USER_A 角色"
Sheets(1).Cells(i, 2).Value = userAObj("ROLE")
i = i + 1

' 释放对象,避免内存泄漏
Set userAObj = Nothing
Set userObj = Nothing
Set resultArray = Nothing
Set rootItem = Nothing
Set JSON = Nothing
Set JsonTS = Nothing
Set FSO = Nothing

关键注意点

  • 数组索引规则:VBA的ParseJson返回数组的起始索引是1,不是其他语言常见的0,这是很容易踩坑的点
  • 大小写敏感:JSON字段名是严格区分大小写的,代码里的字段名必须和JSON里的完全一致
  • 层级拆分:建议把每个层级的对象/数组单独赋值给变量,这样不仅调试方便,也能避免因层级嵌套过深导致的代码混乱

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:53:23