零基础搞定VBA JSON解析与转换:免费开源库VBA-JSON一次搞定

零基础搞定VBA JSON解析与转换:免费开源库VBA-JSON一次搞定

【免费下载链接】VBA-JSON JSON conversion and parsing for VBA 【免费下载链接】VBA-JSON 项目地址: https://gitcode.com/gh_mirrors/vb/VBA-JSON

上周帮同事对接一个 Web API:Excel 里躺着一大段接口返回的 JSON 文本,他想把里面的"名称、价格、库存"填进表格,结果只能对着 {、: 和引号手工拆分,折腾一下午还时不时报"类型不匹配"。这个场景你应该不陌生——VBA 没有原生 JSON 解析功能,而开源库 VBA-JSON 恰好就是为这事生的:三行代码,搞定。

你从接口拿回 JSON,Excel 却说:类型不匹配

先想象一个画面。你费劲巴拉调通了 HTTP 请求,终于把数据拿回来了,结果是这样一串:

{"name":"laptop","price":5999,"stock":true}

接下来呢?用 Split 按冒号拆?用 InStr 找引号?数据一嵌套,比如再包个数组、套个对象,字符串函数瞬间变成一场灾难。

其实你的需求很简单:把 JSON 变成能像 对象("键") 这样随手取值的结构,取完还能再变回 JSON 发出去。这就是 VBA-JSON 存在的全部意义——它专门负责 VBA 里的 JSON 解析与转换。

它是什么?一个文件,解决一整类事

VBA-JSON 是个开源库,核心只有一个文件:JsonConverter.bas。

  • 负责把 JSON 文本解析成 VBA 能用的对象(解析)
  • 也负责把字典、集合、数组变回 JSON 文本(转换)
  • 兼容 Excel、Access 等 Office 应用,Windows 和 Mac 都能跑

作者在 Windows Excel 2013 和 Excel for Mac 2011 上都测试过,2007 以上的版本基本通用。没有插件、没有安装包、没有环境配置,一个 .bas 文件就是全部家当。

先把第一个 JSON 跑起来(真的只要三步)

装它就像往书包里塞一本书,三步走:

  1. 把 JsonConverter.bas 下载到本地
  2. 打开 VBA 编辑器(Alt + F11),菜单"文件 → 导入文件",选它
  3. 配字典:Windows 用户在"工具 → 引用"里勾上 Microsoft Scripting Runtime;Mac 用户则导入 VBA-Dictionary 的 Dictionary.cls

然后,复制这段最小代码到模块里,按 F5:

Sub FirstJson()
    Dim jsonText As String
    jsonText = "{""name"":""laptop"",""price"":5999,""stock"":true}"

    Dim parsed As Object
    Set parsed = JsonConverter.ParseJson(jsonText)

    Debug.Print parsed("name")    ' 输出 laptop
    Debug.Print parsed("price")   ' 输出 5999
    Debug.Print parsed("stock")   ' 输出 True
End Sub

注意 VBA 字符串里表示双引号要写两个 "",这行代码的关键就是 ParseJson 这一个函数。跑通了?恭喜,你的 Office 已经会读 JSON 了。

三个真实场景,难度一点点加上去

场景一:把接口返回的行情填进表格

接口返回一个股票列表,你想逐行写进工作表:

Sub FillSheet()
    Dim jsonText As String
    jsonText = "{""items"":[{""code"":""000001"",""price"":15.23},{""code"":""000002"",""price"":25.67}]}"
    Dim data As Object
    Set data = JsonConverter.ParseJson(jsonText)

    Dim r As Long: r = 2
    Dim item As Variant
    For Each item In data("items")      ' 数组自动变成集合
        Cells(r, 1).Value = item("code")
        Cells(r, 2).Value = item("price")
        r = r + 1
    Next item
End Sub

为什么选它? 数组在 VBA 里被自动转成 Collection,For Each 直接遍历,不用再写正则去劈字符串。以前两小时的活,现在十分钟。

场景二:从 .json 配置文件读取设置

你的程序有一堆参数想存在文件里,而不是写死在代码中:

Sub LoadConfig()
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    Dim ts As Object
    Set ts = fso.OpenTextFile("C:\data\config.json", 1)   ' 1 = 只读
    Dim text As String
    text = ts.ReadAll
    ts.Close

    Dim cfg As Object
    Set cfg = JsonConverter.ParseJson(text)
    MsgBox "主题是:" & cfg("theme") & ",端口:" & cfg("port")
End Sub

为什么选它? 对象解析后变成字典结构,取值像查字典一样直观。改配置不用动代码,发个新文件给用户就行,省事多了。

场景三:把 Excel 数据导出成 JSON 交给别的系统

反过来,把数据组装好再变回 JSON 文本:

Sub ExportJson()
    Dim payload As Object
    Set payload = CreateObject("Scripting.Dictionary")
    payload.Add "title", "销售数据"
    payload.Add "values", Array(120, 98, 156)

    Dim output As String
    output = JsonConverter.ConvertToJson(payload, Whitespace:=2)
    Debug.Print output   ' 带缩进的漂亮 JSON
End Sub

为什么选它? ConvertToJson 是解析的逆操作,传 Whitespace:=2 就能输出带缩进的格式,既方便调试,也方便别的系统直接消费。字典、数组、对象随便嵌套,它都接得住。

新手最容易踩的四个坑

  1. 报错"用户定义类型未定义" —— 八成是忘了勾 Microsoft Scripting Runtime 引用,回"工具 → 引用"补上即可。
  2. 身份证号、订单号超过 15 位被截断 —— VBA 只存 15 位有效数字。默认策略是:超过 15 位的纯数字自动当字符串保留,这其实是个保护机制,别急着开 UseDoubleForLargeNumbers,开了才会转成 Double、丢掉精度。
  3. 键名忘了加引号 —— JSON 标准要求键必须带引号,{name:"x"} 这种写法解析会失败。真要容忍无引号键,才需要打开 AllowUnquotedKeys。
  4. Mac 用户直接报找不到 Dictionary —— 别慌,Mac 上没有 Scripting Runtime,记得导入 VBA-Dictionary 的 Dictionary.cls 类文件。

几个开关和日期函数,把上限再抬高一点

VBA-JSON 留了三个全局开关,在 JsonConverter.JsonOptions 里,按需打开即可:

开关默认作用
UseDoubleForLargeNumbersFalse大数字用字符串还是 Double
AllowUnquotedKeysFalse是否允许不带引号的键名
EscapeSolidusFalse输出时是否把 / 转义成 \/

还有一组日期函数:ParseIso / ConvertToIso 处理 ISO 时间字符串,ParseUtc / ConvertToUtc 处理 UTC 时间换算。对接口里的时间字段,这组函数能省掉不少手工格式化。

顺带一提,它本身是从 VBA-Web 项目里成长出来的,如果你之后想构建完整的 API 客户端,这两者搭配非常顺手。

下一步:把它装进你的工具箱

想立刻上手,打开命令行:

git clone https://gitcode.com/gh_mirrors/vb/VBA-JSON

然后按上面三步导入、加引用、复制第一段代码跑一遍。项目里还带着一份测试文件(specs/ 目录下的 Specs.bas),想验证自己对 API 的理解,直接读它比翻文档还快。

VBA-JSON 最打动我的一点是:整个库就一个文件,装进任何 Office 项目几乎零成本,却能把你从手工劈字符串的泥潭里彻底捞出来。下次再看到 JSON,别皱眉——你已经有趁手的工具了。

【免费下载链接】VBA-JSON JSON conversion and parsing for VBA 【免费下载链接】VBA-JSON 项目地址: https://gitcode.com/gh_mirrors/vb/VBA-JSON

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值