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