如何在JavaScript中解析无键名引号的类JSON字符串为对象
无引号键JSON字符串解析方案
方法1:正则替换补全键名引号(推荐,无代码执行风险)
可以通过正则匹配所有未被引号包裹的键名,自动补全双引号后再调用JSON.parse解析,适配绝大多数常规场景,代码示例如下:
var mystring = `{ name: "hello", value: 1234 }` // 正则匹配规则:匹配冒号前、未被单/双引号包裹的合法键名字符 const formattedStr = mystring.replace(/(['"])?([a-zA-Z0-9_]+)(['"])?:/g, '"$2": ') const jsonobj = JSON.parse(formattedStr) console.log(jsonobj) // 输出 {name: 'hello', value: 1234}
若你的业务场景中键名包含特殊字符、空格,只需调整正则匹配规则即可适配。
方法2:利用JS原生语法解析(仅适用于字符串来源100%可信的场景)
你给出的字符串本身符合JS对象字面量语法规则,可以直接用new Function或eval解析,无需额外处理格式:
var mystring = `{ name: "hello", value: 1234 }` // 方式1:用new Function实现 const jsonobj = new Function('return ' + mystring)() // 方式2:用eval实现 // const jsonobj = eval('(' + mystring + ')') console.log(jsonobj) // 输出 {name: 'hello', value: 1234}
警告:如果待解析的字符串来自用户输入、不可信的外部接口,禁止使用该方法,会存在XSS等代码注入风险。
内容的提问来源于stack exchange,提问作者lucky1928
相关产品推荐
相关产品推荐

