如何将字符串格式的数组转换为对象数组?

时间:2017-09-11 09:29:05

标签: javascript

我有一个对象数组,这是一个字符串。

       [{
          '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()哪种工作,但每个数组元素变成一个字符串而不是一个对象。

3 个答案:

答案 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字符串要求keyvalue用双引号括起来,而不是单引号。但是,替换每一个引用可能是不正确的,因为它可能是价值的一部分。因此,您可以通过一系列正则表达式传递字符串,使其格式正确。

<强>示例:

&#13;
&#13;
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;
&#13;
&#13;

答案 2 :(得分:-2)

你可以使用json解析:const arr = JSON.parse(yourString.replace(/'/g, '"')))