如何将非标准JSON格式字符串转换为JavaScript对象?
问题描述
我有一段非标准JSON格式的字符串:
var string = "{ name: 'something', dependencies: [ 'express', 'axios' ] }"
我希望将该字符串转换为JavaScript对象/JSON格式,目标格式如下:
{ name: "something", dependencies: [ "express", "axios" ] }
我尝试使用JSON.parse(string)方法进行转换,但抛出了如下语法错误:
undefined:2 dependencies: [ ^ SyntaxError: Unexpected token d in JSON at position 6
问题原因
JSON有严格的语法规则:
- 对象的键必须用双引号包裹
- 字符串值必须用双引号包裹
你的字符串用了单引号,且键没有加引号,完全不符合JSON标准,所以JSON.parse直接报错。
解决方法
下面是几种可行的转换方案:
方案1:手动修正字符串后用JSON.parse
先把单引号替换成双引号,再给未加引号的键补上双引号:
var string = "{ name: 'something', dependencies: ['express', 'axios'] }"; // 替换单引号为双引号,同时给键添加双引号 var fixedString = string .replace(/'/g, '"') .replace(/([a-zA-Z0-9_]+):/g, '"$1":'); var obj = JSON.parse(fixedString); console.log(obj);
这种方法适合结构简单的场景,如果字符串里有特殊字符(比如键含空格、引号),需要调整正则表达式。
方案2:用eval解析(注意安全风险)
你的字符串本身是合法的JS对象字面量,可以直接用eval解析:
var string = "{ name: 'something', dependencies: ['express', 'axios'] }"; var obj = eval('(' + string + ')'); console.log(obj);
⚠️ 警告:eval会执行任何传入的代码,绝对不能用在处理不可信的外部输入,否则会有严重安全漏洞。
方案3:用第三方库(如json5)
JSON5是JSON的超集,支持未加引号的键、单引号等宽松语法。先安装:
npm install json5
然后在代码中使用:
const JSON5 = require('json5'); var string = "{ name: 'something', dependencies: ['express', 'axios'] }"; var obj = JSON5.parse(string); console.log(obj);
这种方法最可靠,适合复杂的非标准JSON场景。
最终转换结果
转换后的JavaScript对象如下:
{ name: "something", dependencies: [ "express", "axios" ] }
内容的提问来源于stack exchange,提问作者PewPew
相关产品推荐
相关产品推荐

