如何用VBA-Web Library构造含嵌套字典和列表的DHL API POST请求体
使用VBA-Web库构建带嵌套字典和列表的DHL API POST请求体
核心实现逻辑
VBA-Web库通过WebDictionary(对应JSON对象/嵌套字典)和WebCollection(对应JSON数组/列表)的嵌套组合,就能轻松构建复杂的POST请求体,无需手动拼接JSON字符串。
完整代码示例
Sub SendDHLNestedPostRequest() ' 初始化VBA-Web核心对象 Dim ApiClient As New WebClient Dim PostRequest As New WebRequest Dim RootBody As New WebDictionary Dim ShipmentInfo As New WebDictionary Dim PackagesList As New WebCollection Dim Package1 As New WebDictionary Dim Package2 As New WebDictionary ' 配置请求基础参数 ApiClient.BaseUrl = "https://api.dhl.com/your-specific-endpoint" PostRequest.Method = WebMethod.HttpPost PostRequest.ContentType = "application/json" ' 构建嵌套的包裹1信息 Package1.Add "weight", 2.5 Set Package1("dimensions") = New WebDictionary Package1("dimensions").Add "length", 30 Package1("dimensions").Add "width", 20 Package1("dimensions").Add "height", 15 ' 构建嵌套的包裹2信息 Package2.Add "weight", 1.8 Set Package2("dimensions") = New WebDictionary Package2("dimensions").Add "length", 25 Package2("dimensions").Add "width", 15 Package2("dimensions").Add "height", 10 ' 将包裹添加到列表(对应JSON数组) PackagesList.Add Package1 PackagesList.Add Package2 ' 构建运单主信息(包含嵌套地址和包裹列表) ShipmentInfo.Add "shipperName", "John Doe" Set ShipmentInfo("shipperAddress") = New WebDictionary ShipmentInfo("shipperAddress").Add "street", "123 Main St" ShipmentInfo("shipperAddress").Add "city", "New York" ShipmentInfo("shipperAddress").Add "postalCode", "10001" ShipmentInfo.Add "packages", PackagesList ' 组装根请求体 RootBody.Add "shipmentRequest", ShipmentInfo RootBody.Add "requestId", "REQ-20240520-001" ' 绑定请求体并发送请求 Set PostRequest.Body = RootBody Dim ApiResponse As WebResponse Set ApiResponse = ApiClient.Execute(PostRequest) ' 处理响应结果 If ApiResponse.StatusCode = WebStatusCode.Ok Then Debug.Print "请求成功:" & ApiResponse.Content Else Debug.Print "请求失败:" & ApiResponse.StatusCode & " - " & ApiResponse.Content End If End Sub
关键细节说明
- WebDictionary:用于构建JSON键值对结构,支持嵌套其他
WebDictionary实现多层对象(比如示例中的dimensions、shipperAddress)。 - WebCollection:用于构建JSON数组结构,直接通过
Add方法将WebDictionary类型的元素加入,实现列表效果(比如多个包裹信息)。 - 自动序列化:将根
WebDictionary赋值给Request.Body后,VBA-Web会自动将整个嵌套结构序列化为标准JSON格式,无需手动处理字符串拼接。
注意事项
- 确保已在VBA项目中引用VBA-Web库(通过「工具」→「引用」选择对应库)。
- 需根据DHL API的实际字段要求,调整代码中的键名、数据类型和嵌套层级。
内容的提问来源于stack exchange,提问作者KAtkinson
相关产品推荐
相关产品推荐

