VBA使用JsonConverter解析API返回JSON时报错13类型不匹配如何解决
问题根因
- 核心原因是从Excel单元格读取的事务编码存在不可见冗余字符(前后空格、非打印换行符、制表符等),和接口返回JSON的key不完全匹配。你用硬编码固定字符串测试可以正常运行,说明JSON解析逻辑本身没有问题,访问不存在的key时就会触发错误13类型不兼容。
- 没有做键存在性校验,当遇到接口未返回的事务编码时,直接访问
oJson(codeAffString)会直接抛出类型不匹配错误。
解决步骤
- 清理读取到的单元格值,去除冗余字符
将代码中codeAffString = Cells(i, 4)修改为:
codeAffString = Trim(WorksheetFunction.Clean(Cells(i, 4).Value))
其中Trim用于去除前后空格,Clean函数用于去除所有非打印的隐形字符。
2. 增加键存在性校验,避免访问不存在的key
将代码中Debug.Print oJson(codeAffString)("name")替换为如下逻辑:
' 先判断key是否存在 If oJson.Exists(codeAffString) Then ' 配合后端逻辑,先判断alone字段避免取不到name If oJson(codeAffString)("alone") = True Then Debug.Print codeAffString & " 对应名称:" & oJson(codeAffString)("name") Else Debug.Print codeAffString & " 存在多条记录:" & oJson(codeAffString)("message") End If Else Debug.Print "未找到匹配数据,事务编码:" & codeAffString End If
- 调试验证
如果修改后仍有报错,可以在给codeAffString赋值后增加一行调试代码,对比值是否和JSON中的key完全一致:
Debug.Print "|" & codeAffString & "|"
通过前后添加分隔符|可以直观看到是否有多余的隐形字符。
额外优化建议
- 不需要开启
JsonConverter.JsonOptions.AllowUnquotedKeys = True配置,你接口返回的JSON所有key都自带双引号,该配置可以直接删除。 - 后端返回的Map中包含
result、error这类非事务编码的key,不需要在循环中处理,不会影响正常逻辑。
内容的提问来源于stack exchange,提问作者Fab83i
相关产品推荐
相关产品推荐

