如何将非标准JSON格式的字符串表达式转换为JS object对象
非标准JS对象字面量字符串转对象的解决方案
- 方案1:直接用
new Function解析(推荐,适配所有合法JS对象字面量场景)
你存储在div里的本身就是合法的JS对象字面量语法,不需要转成标准JSON就能直接解析,这个方法实现最简单:
const rawStr = $("div").text(); const targetObj = new Function(`return ${rawStr}`)(); // 测试输出 console.log(targetObj.name) // 输出 Jeff
注意:这个方案默认你完全信任div内的内容来源,没有恶意脚本注入的风险,适合自己可控的前端场景使用。
- 方案2:正则补全键名引号转标准JSON后解析
如果需要严格规避执行任意代码的风险,可以通过正则替换给未加引号的键补双引号,再用JSON.parse解析:
const rawStr = $("div").text(); // 正则匹配所有未带引号的对象键,统一补双引号 const standardJsonStr = rawStr.replace(/(\s*?{\s*?|\s*?,\s*?)(['"])?([a-zA-Z0-9_]+)(['"])?:/g, '$1"$3":'); const targetObj = JSON.parse(standardJsonStr);
注意:这个正则默认对象键都是由英文、数字、下划线组成的合法标识符,如果你的键包含特殊字符、空格等需要自行调整正则规则。
内容的提问来源于stack exchange,提问作者Cybernetic
相关产品推荐
相关产品推荐

