可以使用eval()
来达到类似的效果JSON.parse()
。
eval('obj = {' + JSONstring + '}');
之后,obj.toString()
将让您检索类似的数据JSON.stringify()
(只是没有美化选项)。有关野外示例,请参见此答案。关键是,您可以从 JSON 文本创建对象,而无需加载任何外部库或切换解释器引擎。
大胖警告!!!
这会在运行您的代码的工作站中引入一个漏洞。如果您不控制要解析的 JSON 的生成,或者第 3 方可能会在生成和解释之间修改 JSON,请考虑遵循Helen 的建议。如果 JSON 中有坏事,它可能会导致您的 WScript 做坏事。例如,如果您的 JSON 字符串或文件包含以下内容:
};
var oSH = WSH.CreateObject("wscript.shell"),
cmd = oSH.Exec("%comspec%");
WSH.Sleep(250);
cmd.StdIn.WriteLine("net user pwnd password /add");
WSH.Sleep(250);
cmd.StdIn.WriteLine("net group Administrators pwnd /add");
WSH.Sleep(250);
cmd.Terminate();
var obj = {
"objName": {
"item1": "value 1",
"item2": "value 2"
}
...然后解析它eval
只会在您的计算机中添加一个新管理员,而没有任何视觉迹象表明它发生了。
我的建议是随意雇用eval
私人或休闲用途;但对于广泛部署,请考虑按照 Helen 的建议 包含json2.js 。编辑:或者...
htmlfile COM 对象
您可以通过调用COM 对象并通过如下标记htmlfile
强制其进入 IE9(或更高版本)兼容模式来导入 JSON 方法:<META>
var htmlfile = WSH.CreateObject('htmlfile'), JSON;
htmlfile.write('<meta http-equiv="x-ua-compatible" content="IE=9" />');
htmlfile.close(JSON = htmlfile.parentWindow.JSON);
通过这三行,JSON 对象和方法被复制到 JScript 运行时中,让您无需使用eval()
或下载 json2.js 即可解析 JSON。您现在可以执行以下操作:
var pretty = JSON.stringify(JSON.parse(json), null, '\t');
WSH.Echo(pretty);
这是一个细分:
// load htmlfile COM object and declare empty JSON object
var htmlfile = WSH.CreateObject('htmlfile'), JSON;
// force htmlfile to load Chakra engine
htmlfile.write('<meta http-equiv="x-ua-compatible" content="IE=9" />');
// The following statement is an overloaded compound statement, a code golfing trick.
// The "JSON = htmlfile.parentWindow.JSON" statement is executed first, copying the
// htmlfile COM object's JSON object and methods into "JSON" declared above; then
// "htmlfile.close()" ignores its argument and unloads the now unneeded COM object.
htmlfile.close(JSON = htmlfile.parentWindow.JSON);
有关其他方法(通过 XHR 下载 json2.js、InternetExplorer.Application
COM 对象、HTA 混合方法和另一个示例),请参见此答案htmlfile
。