十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

用 1 个 VBA 文件解析 JSON:从安装到避开 10001 报错的完整指南

用 1 个 VBA 文件解析 JSON:从安装到避开 10001 报错的完整指南 用 1 个 VBA 文件解析 JSON从安装到避开 10001 报错的完整指南【免费下载链接】VBA-JSONJSON conversion and parsing for VBA项目地址: https://gitcode.com/gh_mirrors/vb/VBA-JSONVBA 里没有现成的 JSON 解析库手写的字符串拼接代码在遇到嵌套和转义时几乎必然出错。VBA-JSON把这件事压缩成仓库根目录的JsonConverter.bas一个文件——1123 行代码提供ParseJsonJSON 字符串变对象和ConvertToJson对象变 JSON 字符串两个入口函数Excel、Access 等 Office 应用在 Windows 和 Mac 上通用。一个文件替你挡掉了什么手写解析的难点不在于第一层取值而在于后面所有情况嵌套对象、嵌套数组、转义字符\、字符串里的换行和空格、键名带冒号或空格。这些JsonConverter.bas里都处理好了解析结果直接落到 VBA 最熟悉的两种结构上对象变Dictionary数组变Collection。场景方案只在 Windows 上用加对Microsoft Scripting Runtime的引用Windows Mac 通用引入 VBA-Dictionary 项目的Dictionary.cls类模块为什么必须有这一步因为ParseJson返回的Dictionary/Collection不是 VBA 内置类型总得有人提供——这是整个库唯一的外援。VBA-JSON 怎么装进项目3 步git clone https://gitcode.com/gh_mirrors/vb/VBA-JSONVBA 编辑器Alt F11里在工程上右键 → 导入文件 → 选JsonConverter.bas按上表补一个依赖编译一次不报错就装好了依赖没配好时Dictionary这个类型会直接在编译期暴露出来比运行期报错好排查得多。一个完整任务解析、修改、生成下面这段直接贴进模块跑从接口返回的 JSON 到改完写回一条线走完Dim Json As Object ParseJsonJSON 字符串 → Dictionary / Collection Set Json JsonConverter.ParseJson({城市:上海,温度:26.5,预警:[雷电,大风]}) Debug.Print Json(温度) 26.5 Debug.Print Json(预警)(2) 大风Collection 下标从 1 开始见下节 Json(湿度) 0.72 直接加字段 Json(预警).Add 暴雨 直接往数组里加元素 Debug.Print JsonConverter.ConvertToJson(Json) 紧凑{城市:上海,...} Debug.Print JsonConverter.ConvertToJson(Json, Whitespace:2) 缩进 2 格结构一目了然输入不合法时ParseJson抛出错误码10001例如传入Howdy!会得到Error parsing JSON: Howdy! ^ Expecting { or [箭头指着它卡住的位置——它期待 JSON 以{对象或[数组开头。键后缺冒号时报Expecting :值不合法时报Expecting STRING, NUMBER, null, true, false, {, or [都是 10001箭头直接定位到出错的那一列不用逐字猜。2 个反直觉的默认行为先知道再上手1. 超过 15 位的纯数字默认返回 String。VBA 的Double只能可靠保存 15 位有效数字订单号、卡号一旦超位末尾几位会被悄悄截断成...4560。所以库的默认策略是超过 15 位的纯数字一律当字符串返回宁可类型不纯也不丢数据。仓库specs/Specs.bas里有一组 30 位数字的断言专门锁死这个行为。如果你确实要数字类型JsonConverter.JsonOptions.UseDoubleForLargeNumbers True 默认 False会丢精度慎用2. 数组下标从 1 开始。Collection的规矩Json(b)(2)取的是第二个元素不是 JSON 里下标为 2 的那个。写循环时记住1 To .Count。另外两个全局开关都在JsonOptions上按需打开即可AllowUnquotedKeys允许不带引号的键名标准 JSON 不允许、EscapeSolidus输出时把/转义成\/默认都是False。不跑测试怎么自查2 分钟肉眼验证在 VBA 编辑器建个模块跑这一段Sub 验证VBAJSON() On Error GoTo 失败 Dim r As Object Set r JsonConverter.ParseJson({id:123456789012345678,list:[1,2]}) Debug.Print TypeName(r(id)), r(list)(1) 期望String 和 1 Debug.Print JsonConverter.ConvertToJson(r, Whitespace:2) Exit Sub 失败: Debug.Print Err.Number 期望 0如果是 10001说明 JSON 本身不合法 End Sub看三个结果id 的类型是String精度保护在工作、列表第一个元素是1下标从 1 起、最后打印出带缩进的多行 JSON。全对上你的环境就通了。想系统性地确认specs/Specs.bas里写了 460 行、30 组左右断言覆盖嵌套数组、转义单引号、null、日期转 ISO 格式打开specs/VBA-JSON - Specs.xlsm跑一遍全绿即环境无误。一个文件装下 VBA 的整个 JSON 世界——去把specs/下的测试跑一次看 30 组断言全绿今天就可以拿真实接口的数据试手了。【免费下载链接】VBA-JSONJSON conversion and parsing for VBA项目地址: https://gitcode.com/gh_mirrors/vb/VBA-JSON创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表