Excel JSON VBA解析-确定数组是否为空

Excel JSON VBA解析-确定数组是否为空,json,excel,vba,jscript,Json,Excel,Vba,Jscript,我正在尝试解析JSON响应。我无法使用VBA-JSON库。我需要检查嵌套数组是空的还是空的。我不断地发现这个错误: JSON示例: { "gardenAssets": [], "gardenAssetsAlertCount": 0, "gardenAssetsCount": 0, "gardenAssetsErrorCount": 0, "locationsSummaries": [ {

我正在尝试解析JSON响应。我无法使用VBA-JSON库。我需要检查嵌套数组是空的还是空的。我不断地发现这个错误:

JSON示例:

{
"gardenAssets": [],
"gardenAssetsAlertCount": 0,
"gardenAssetsCount": 0,
"gardenAssetsErrorCount": 0,
"locationsSummaries": [
    {
        "locations": [
            {
                "auditOrder": "102",
                "code": "POT 102",
                "name": "POT 102",
                "type": "ProcessingLocation",
                "gardenAssets": [
                    {
                        "annotation": "Pallets",
                        "broker": {
                            "code": "TMTO",
                            "isOwner": null,
                            "name": null
                        },
                        "datetimeOfArrivalIngarden": 1622754283.937,
                        "id": "crusaf",
                        "isSealable": true,
                        "load": null,
                        "mastergardenCode": null,
                        "name": null,
                        "owner": {
                            "code": "SUN",
                            "isOwner": null,
                            "name": null
                        }
                    }
                ]
            },
            {
                "auditOrder": "103",
                "code": "POT 103",
                "description": "POT 103",
                "id": "110746",
                "name": "POT 103",
                "type": "ProcessingLocation",
                "gardenAssets": []
            },
            {
                "auditOrder": "104",
                "code": "POT 104",
                "name": "POT 104",
                "gardenAssets": [
                    {
                        "annotation": "Soil",
                        "broker": {
                            "code": "OTHR",
                            "isOwner": null,
                            "name": null
                        },
                        "datetimeOfArrivalIngarden": 1622571699.767,
                        "id": "arserana",
                        "isSealable": true,
                        "load": null,
                        "mastergardenCode": null,
                        "name": null,
                        "owner": {
                            "code": "WTR",
                            "isOwner": null,
                            "name": null
                        }
                    }
                ]
            },
            {
                "auditOrder": "111",
                "code": "POT 111",
                "name": "POT 111",
                "type": "ProcessingLocation",
                "gardenAssets": [
                    {
                        "annotation": null,
                        "broker": {
                            "code": "CLD",
                            "isOwner": null,
                            "name": null
                        },
                        "datetimeOfArrivalIngarden": 1622746446.932,
                        "id": "Bacrea",
                        "isSealable": true,
                        "load": null,
                        "mastergardenCode": null,
                        "name": null,
                        "owner": {
                            "code": "ICE",
                            "isOwner": null,
                            "name": null
                        },
                        "status": "EMPTY",
                        "type": "JUNK",
                        "unavailable": false,
                        "visitId": "1003768526"
                    }
                ]
            }
        ],
        "logingarden": true,
        "mastergardenCodes": [],
        "gardenCode": "FUN5"
    }
],
"offsitegardens": [],
"gardenAssetsInTransit": []}
代码:


我需要从JSON中提取不同的信息,这取决于是否有任何资源。但是我似乎无法检查数组是否为空。

示例JSON无效。对象的最后一个成员或数组的最后一个元素后面不应该有逗号。因此,你有:

  "broker": {
    "code": "TMTO",
    "isOwner": null,
    "name": null,
  }
“name”:null之后不应该有逗号-在示例JSON中有多个其他类似错误


您可以使用在线JSON验证器(如)来检测这些错误。理想情况下,您希望修复生成此无效JSON的系统,而不是自己在处理过程中尝试更正问题。您可以使用JScript中的length属性

Dim S作为对象
Dim n为整数,i为整数,r为长
r=Sheet1.单元格(Rows.Count,1).结束(xlUp).偏移量(1).行
设置S=CreateObject(“脚本控件”)
用S
.Language=“JScript”
.eval“var J=“&http.ResponseText
.eval“var A=J.locationsSummaries['0'].位置”
对于n=1至S.eval(“A.length”)
.eval“var L=A[”&n-1&“]
对于i=1至.eval(“L.L.length”)
表1.单元格(r,1)=.eval(“L.代码”)
表1.单元格(r,2)=.eval(“L.gardenAssets[”&i-1&“].id”)
r=r+1
下一个
下一个
以

您可以使用Tim Hall的JsonConverter。它将创建嵌套字典和集合的数据结构。要检查是否有“gardenAssets”的条目,只需检查集合计数是否有超过0个条目。每个{}生成一个字典,[]生成一个集合。我不能使用VBA-JSON库。因为?它是一个.bas文件,可以作为自己的模块导入VBA项目。不需要管理员权限。或者这像是一个家庭作业,您必须使用ScriptControl对象?通过ScriptControl进行project.IIRC评估的要求存在安全风险。请不要以这种方式实现项目。修复了JSON。现在应该都好了。这是我修改过的一个例子。对这些错误感到抱歉。
  "broker": {
    "code": "TMTO",
    "isOwner": null,
    "name": null,
  }