You need to enable JavaScript to run this app. 使用VBA-Web与VBA-JSON解析WooCommerce接口JSON报424错误如何解决
优惠活动
大模型
产品
解决方案
定价
更多

使用VBA-Web与VBA-JSON解析WooCommerce接口JSON报424错误如何解决

报错原因

  • 误用Response.Data属性:VBA-Web工具本身会自动识别响应的JSON格式,Response.Data已经是解析完成的Dictionary/Collection对象,并非原始JSON字符串,将对象传入要求字符串输入的JsonConverter.ParseJson方法自然会触发对象缺失报错。
  • 未做响应有效性校验:代码没有预先判断接口返回状态是否为200成功,若接口返回4xx/5xx错误,返回内容为错误提示文本而非合法JSON,传入解析函数也会触发该报错。
  • 依赖配置缺失:若未在VBA工程引用中勾选Microsoft Scripting Runtime,VBA-JSON Converter无法正常创建Dictionary对象存储解析结果,也会触发同类报错。

正确解析方案

修正后完整代码

Sub TestWC()
    Dim WoocommerceClient As New WebClient
    Dim Client As String
    Dim Secret As String
    Dim Request As New WebRequest
    Dim Response As WebResponse
    Dim Orders As Object ' 存储解析后的订单列表
    Dim SingleOrder As Object ' 存储单个订单
    Dim LineItem As Object ' 存储订单商品行
    
    ' 配置客户端参数
    WoocommerceClient.BaseUrl = "https://www.example.com"
    Client = "替换为你的ck_开头的consumer key"
    Secret = "替换为你的cs_开头的consumer secret"
    
    ' 配置请求参数
    Request.Method = HttpGet
    Request.Resource = "/wp-json/wc/v3/orders"
    Request.AddQuerystringParam "consumer_key", Client
    Request.AddQuerystringParam "consumer_secret", Secret
    Request.AddQuerystringParam "per_page", "10" ' 可选:指定单次拉取订单数量
    
    ' 执行请求
    Set Response = WoocommerceClient.Execute(Request)
    
    ' 首先校验请求是否成功
    If Response.StatusCode <> 200 Then
        MsgBox "接口请求失败,错误码:" & Response.StatusCode & ",错误信息:" & Response.Content
        Exit Sub
    End If
    
    ' 方式1:直接用VBA-Web自动解析好的Data对象,无需二次调用解析函数
    Set Orders = Response.Data
    
    ' 方式2:如需手动解析,传入原始JSON字符串属性Response.Content即可
    ' Set Orders = JsonConverter.ParseJson(Response.Content)
    
    ' -------------------- 键值对提取示例 --------------------
    ' 订单接口返回的是数组,遍历所有订单
    For Each SingleOrder In Orders
        ' 提取一级字段,比如订单ID、状态、总金额
        Debug.Print "订单ID:" & SingleOrder("id")
        Debug.Print "订单状态:" & SingleOrder("status")
        Debug.Print "订单总金额:" & SingleOrder("total")
        
        ' 提取嵌套对象字段,比如账单地址的邮箱
        Debug.Print "下单邮箱:" & SingleOrder("billing")("email")
        
        ' 提取数组字段,比如商品行
        Debug.Print "订单商品列表:"
        For Each LineItem In SingleOrder("line_items")
            Debug.Print "商品名:" & LineItem("name") & ",数量:" & LineItem("quantity") & ",单价:" & LineItem("price")
        Next LineItem
        Debug.Print "-------------------------"
    Next SingleOrder
    
End Sub

额外注意事项

如果选择从单元格读取JSON解析,需要确认单元格内容为完整合法JSON,没有被Excel自动截断,再传入解析函数即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 16:39:03