如何不使用正则表达式,通过JSON对象统计JSON数组元素数量?
问题描述
我有如下简单JSON数组:
["123", "124", "321"]
想要不使用正则表达式,纯基于JSON对象统计元素数量,预期结果为3。
尝试了以下VBScript代码:
Dim jsonStr, jsonArray, elementCount jsonStr = "[""123"", ""124"", ""321""]" Set jsonScriptControl = CreateObject("ScriptControl") jsonScriptControl.Language = "JScript" Set jsonArray = jsonScriptControl.Eval("(" + jsonStr + ")") elementCount = jsonArray.Length MsgBox "Number of elements: " & elementCount
但运行时报错:
Microsoft VBScript runtime error: An ActiveX component cannot create an object: 'ScriptControl'.
解决方案
ScriptControl创建失败大多是因为64位系统默认禁用该组件,或者组件未正确注册。以下是两种无需依赖它的可行方案:
方案一:用.NET的JavaScriptSerializer解析
该方案依赖.NET Framework,适用于已安装.NET的Windows环境:
Dim jsonStr, serializer, jsonArray, elementCount jsonStr = "[""123"", ""124"", ""321""]" ' 初始化.NET JSON序列化器 Set serializer = CreateObject("System.Web.Script.Serialization.JavaScriptSerializer") ' 将JSON字符串反序列化为ArrayList(对应JSON数组) Set jsonArray = serializer.Deserialize(jsonStr, CreateObject("System.Collections.ArrayList").GetType()) ' 获取元素数量 elementCount = jsonArray.Count MsgBox "Number of elements: " & elementCount
方案二:通过临时JScript脚本解析
借助Windows Script Host执行JScript代码完成JSON解析,无需依赖特殊组件:
Dim jsonStr, jscriptCode, ws, fso, tempFile, elementCount jsonStr = "[""123"", ""124"", ""321""]" ' 编写JScript逻辑:解析JSON并返回数组长度 jscriptCode = "function getLength(json) { return JSON.parse(json).length; }" jscriptCode = jscriptCode & " WScript.Echo(getLength('" & Replace(jsonStr, "'", "\'") & "'));" ' 创建临时脚本文件 Set fso = CreateObject("Scripting.FileSystemObject") tempFile = fso.GetSpecialFolder(2) & "\json_count.js" Set file = fso.CreateTextFile(tempFile, True) file.WriteLine(jscriptCode) file.Close ' 执行脚本并获取结果 Set ws = CreateObject("WScript.Shell") elementCount = ws.Run("cscript.exe //nologo """ & tempFile & """", 0, True) ' 清理临时文件 fso.DeleteFile(tempFile) MsgBox "Number of elements: " & elementCount
可选:修复ScriptControl的使用
如果一定要用ScriptControl,可以尝试:
- 在32位命令提示符下运行脚本(64位系统中该组件仅注册在32位环境);
- 管理员权限下手动注册组件:
regsvr32.exe %SystemRoot%\SysWOW64\mshtml.dll
内容的提问来源于stack exchange,提问作者executable
相关产品推荐
相关产品推荐

