我有一个对象数组,这是一个字符串。
[{
'version_name': '1.4',
'url': 'url'
},
{
'version_name': '1.3',
'url': 'url'
},
{
'version_name': '1.2',
'url': 'url'
},
{
'version_name': '1.1',
'url': 'url'
}]
我正在使用此代码删除所有空格:
str = str.replace(/\s+/g, '');
现在,我想将其转换为正确的对象数组。我怎么做?
我尝试string.split()
哪种工作,但每个数组元素变成一个字符串而不是一个对象。
答案 0 :(得分:3)
如果您控制字符串的源,最好的做法是修改源代码,以便在属性键上创建有效的JSON("
而不是'
和字符串)。
如果你无法更改它的来源并且必须处理该字符串,那么你有几个选择:
将'
替换为"
并使用JSON.parse
,因为该文本是有效的JSON,而不是{J}使用'
而不是"
似乎使用'
代替 else :
var result = JSON.parse(theText.replace(/'/g, '"'));
直播示例:
var theText = "[{'version_name':'1.1','url':'value'}, {'version_name':'1.2','url':'value'}, {'version_name':'1.32','url':'value'}, {'version_name':'1.4','url':'value'}]";
var result = JSON.parse(theText.replace(/'/g, '"'));
console.log(result);
如果您信任该文字的来源,则您的另一个选择是使用eval
,因为引用的文字是有效的JavaScript对象初始化程序语法。
// ONLY IF YOU CAN ABSOLUTELY TRUST THE SOURCE OF THAT TEXT
var result = eval(theText);
直播示例:
var theText = "[{'version_name':'1.1','url':'value'}, {'version_name':'1.2','url':'value'}, {'version_name':'1.32','url':'value'}, {'version_name':'1.4','url':'value'}]";
var result = eval(theText);
console.log(result);
答案 1 :(得分:0)
JSON字符串要求key
和value
用双引号括起来,而不是单引号。但是,替换每一个引用可能是不正确的,因为它可能是价值的一部分。因此,您可以通过一系列正则表达式传递字符串,使其格式正确。
<强>示例:强>
var str = "[{'invalid_value': 'foo's','version_name': '1.4','url': 'url'} , {'version_name': '1.3','url': 'url'},{'version_name': '1.2','url': 'url'},{'version_name': '1.1','url': 'url' }]";
function parseObj(str) {
str = str.replace(/\'\s*:\s*\'/g, '":"');
str = str.replace(/\'\s*,\s*'/g, '","');
str = str.replace(/{\s*\'/g, '{"');
str = str.replace(/\'\s*}/g, '"\}');
return JSON.parse(str);
}
console.log(parseObj(str))
&#13;
答案 2 :(得分:-2)
你可以使用json解析:const arr = JSON.parse(yourString.replace(/'/g, '"')))