首页 > 解决方案 > 如何在 VBA 中解析嵌套的 JSON

问题描述

我有一个站点,我需要连接到其中获取 JSON 文件,然后解析出我需要的信息。但是由于数据是嵌套的,我遇到了一些困难……有人可以帮忙吗?我正在使用 VBAJSON 库来尝试解析这个..

JSON 文件如下所示:

{
    record: [
        {
            Name: "Bob",
            Created: "2020/06/18"
        },
        {
            Age: "52",
            TableName: "AGE"
        },
        {
            School: "Woodside",
            TableName: "School"
        }
        {
            Phone: "Iphone",
            TableName: "Phone"
        },
    ]
}

'这是开始获取数据并解析它的尝试,但我迷路了......

Sub getjson2()
Dim hReq As New WinHttpRequest
Dim strURL As String, JSON As Dictionary

strURL = "testsite.com/abcd"

hReq.Open "GET", strURL, False

hReq.Send

Dim response As String
    response = hReq.ResponseText
    

Set JSON = JsonConverter.ParseJson(response)

End Sub

标签: jsonvba

解决方案


首先,您发布的 Json 无效。更具体地说,它在数组的第三个元素之后缺少一个逗号,在数组的第四个元素之后不应该有一个逗号,并且它还缺少所有键的引号。它应该是这样的:

{
  "record": [
    {
      "Name": "Bob",
      "Created": "2020/06/18"
    },
    {
      "Age": "52",
      "TableName": "AGE"
    },
    {
      "School": "Woodside",
      "TableName": "School"
    },
    {
      "Phone": "Iphone",
      "TableName": "Phone"
    }
    
  ]
}

除此之外,我看到您正在使用VBA-JSON解析器,所以我假设您已经添加了对该Microsoft Scripting Runtime库的引用。

说了这么多,解析 json 是相当容易的。以下是获取School键值的方法,例如:

Debug.Print JSON("record")(3)("School")

这将打印Woodside在您的即时窗口中。您可以通过相应地调整代码来获取其余值。

笔记:

我总是推荐使用标准的 JSON 格式。但是,如果这超出了您的控制范围,因为您收到的响应是这样格式化的,那么有一种方法可以避免缺少引号:

JsonConverter.JsonOptions.AllowUnquotedKeys = True

推荐阅读