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不一致)。咱们一步步拆解这个结构,把需要的字段精准捞出来:
- 最外层的
root是数组,而且只有一个元素,所以要先取JSON("root")(1)(VBA里ParseJson返回的数组是从1开始索引的,不是0) - 接着进入
STATUS_RE对象,再定位到存放目标数据的RESULT数组 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
相关产品推荐
相关产品推荐

