将字符串化的对象数组转换成对象数组的Javascript

3

我有一个变量(通过HTTP响应给我的字符串):

var result = '[{name: "John"}, {name: "Alice"}, {name: "Lily"}]'

实际上有更多的对象,每个对象有更多的属性,但是你应该明白。

当尝试使用JSON.parse(result)时,我得到了以下错误:

[{name: "John"}, {name: "Alice"}, {name: "Lily"}]
  ^

SyntaxError: Unexpected token n

我该如何将这个字符串解析为一个JavaScript对象数组?

3
不是有效的 JSON。 - Pranav C Balan
1
keys should be in quotes like [{"name": "John"}... - David
如果你真的不在乎这些缺点,你可以使用var result = eval(yourString);来执行。 - Juan Tonina
3个回答

7

这不是有效的JSON。为了使其成为有效的JSON,你需要在键周围添加引号("name")。

[{"name": "John"}, {"name": "Alice"}, {"name": "Lily"}]

错误是由于解析器没有遇到"而是遇到了n导致的。

1

由于您的字符串不是有效的JSON(它缺少属性键周围的引号),因此无法使用JSON.parse解析它。如果您可以控制响应,则应将其更改为返回:

[{"name": "John"}, {"name": "Alice"}, {"name": "Lily"}]


工作演示:

var result = '[{"name": "John"}, {"name": "Alice"}, {"name": "Lily"}]'

console.log(JSON.parse(result))
.as-console-wrapper { min-height: 100%; }


0
由于您的输入格式是固定的,解析起来很简单。
function cutSides(s) { return s.substring(1, s.length - 1); }
var pairs = cutSides(result).split(', ');
var list_of_objects = pairs.map(function(s) { 
    var pair = cutSides(s).split(': ');
    var result = {};
    result[pair[0]] = cutSides(pair[1]); 
    return result;
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接