如何在HTA文件中用JS将文件字符串转为对象(不使用JSON.parse)
不用JSON.parse解析JSON字符串为对象的方法(HTA环境)
既然你在HTA环境里遇到了JSON.parse的问题(大概率是因为HTA默认使用的老版本JScript引擎不支持原生JSON API),这里有几个可靠的替代方案,不需要依赖JSON.parse:
方案1:使用JScript的eval函数
JScript的eval可以直接执行JSON字符串对应的对象字面量代码,只需要给JSON字符串包裹一层括号,避免语法歧义:
// 你已经获取到的JSON字符串 var configs = '{"default":{"content":"main"}}'; var configObj; try { // 包裹括号让引擎把大括号识别为对象表达式而非代码块 configObj = eval('(' + configs + ')'); // 测试访问属性 alert(configObj.default.content); // 会弹出 "main" } catch (error) { alert('解析失败: ' + error.message); }
注意事项
eval会执行任何传入的代码,所以只在你完全信任这个JSON文件内容的场景下使用(比如自己维护的配置文件),避免注入风险。
方案2:混合VBScript解析(HTA专属)
HTA支持同时使用JScript和VBScript,你可以借助VBScript的Execute语句来解析JSON:
<!-- 先定义VBScript的解析函数 --> <script language="VBScript"> Function ParseJSON(jsonString) Dim parsedObj ' 直接把JSON字符串当作对象赋值语句执行 Execute "Set parsedObj = " & jsonString Set ParseJSON = parsedObj End Function </script> <!-- 你的JScript代码 --> <script language="JScript"> var fso = new ActiveXObject('Scripting.FileSystemObject'); var configsHandle = fso.OpenTextFile('configs.json', 1); var configs = configsHandle.ReadAll(); configsHandle.Close(); // 调用VBScript的解析函数 var configObj = ParseJSON(configs); alert(configObj.default.content); </script>
这个方法在老版本JScript环境下兼容性很好,因为VBScript的对象解析逻辑对JSON格式的支持比较友好。
内容的提问来源于stack exchange,提问作者stckvrw
相关产品推荐
相关产品推荐

