如何在JavaScript中解析格式为'{name: "amit", age: 40}'的对象?
解析非标准JSON格式字符串的方法
你拿到的字符串并非标准JSON格式(JSON要求对象的键必须用双引号包裹),直接使用JSON.parse()会触发语法错误,以下是几种可行的解析方案:
方案1:使用eval()(不推荐,存在安全风险)
若能确保字符串来源绝对安全、无恶意代码,可以用eval()直接解析:
var str = '{name: "amit", age: 40}'; var obj = eval('(' + str + ')'); console.log(obj.name); // 输出 "amit"
注意:eval()会执行字符串中的任意代码,若字符串不可信,可能导致注入攻击,非必要场景请勿使用。
方案2:转成标准JSON后解析
通过正则表达式给无引号的键添加双引号,转换成合法JSON格式后再用JSON.parse()解析:
var str = '{name: "amit", age: 40}'; // 正则匹配并替换无引号的键 var validJsonStr = str.replace(/([a-zA-Z0-9_]+):/g, '"$1":'); var obj = JSON.parse(validJsonStr); console.log(obj.age); // 输出 40
该方法安全性更高,正则能处理大多数由字母、数字、下划线组成的常规键名。
方案3:使用第三方宽松JSON解析库(如json5)
如果需要频繁处理这类非标准格式字符串,可以使用专门支持宽松JSON语法的库json5:
// 先安装依赖:npm install json5 const JSON5 = require('json5'); var str = '{name: "amit", age: 40}'; var obj = JSON5.parse(str); console.log(obj); // 输出 { name: 'amit', age: 40 }
json5支持无引号键、单引号字符串、注释等多种宽松语法,适合复杂场景。
内容的提问来源于stack exchange,提问作者Amit Paple
相关产品推荐
相关产品推荐

