在Javascript中将JSON字符串转换为JSON对象数组

69

我想要将这个字符串转换

{"id":1,"name":"Test1"},{"id":2,"name":"Test2"}

如何将其转换为包含两个JSON对象的数组?我该怎么做?

最佳方案


3
如果你得到的是一个 JSON 字符串,那么它本身就不是有效的 JSON... 你从哪里获取它的?能否提供一个更完整的代码示例? - Felix Kling
6个回答

96

使用jQuery:

var str = '{"id":1,"name":"Test1"},{"id":2,"name":"Test2"}';
var jsonObj = $.parseJSON('[' + str + ']');

jsonObj 是你的 JSON 对象。


5
jQuery.parseJSON()已被弃用。 - Marc L.
@MarcL。应该用什么来替换它? - Parapluie
4
JSON.parse 已经成为“标准内置”对象数年了。 - Marc L.

40

就是这么简单。

var str = '{"id":1,"name":"Test1"},{"id":2,"name":"Test2"}';
 dataObj = JSON.parse(str);

2
正如原问题的评论所述,给定的字符串不是有效的JSON。 - Adrian Wragg
在某些情况下(比如我的情况),你可能会发现字符串末尾的逗号会导致一些问题。这种方法仍然有效 - 你只需要先使用正则表达式删除最后一个逗号:str = str.replace(/,\s*$/, ""); - Sanchez333

32

正如Luca所指出的那样,在您的字符串中添加额外的[],并使用以下代码:

var myObject = eval('(' + myJSONtext + ')');

你可以使用下面的代码片段进行测试。

var s =" [{'id':1,'name':'Test1'},{'id':2,'name':'Test2'}]";
var myObject = eval('(' + s + ')');
for (i in myObject)
{
   alert(myObject[i]["name"]);
}

希望它能够帮助到您。


2
“eval is Evil: The eval function is the most misused feature of JavaScript. Avoid it” - Douglas Crockford in "Javascript: The Good Parts"由于其风险过高,不推荐使用eval函数。最好使用JSON.parse()代替。 - Jamie Howarth
经过大量的研究,我最终使用了 eval 函数!它将我的字符串 JSON 转换为实际的数组类型 JSON 数据。非常感谢! - Dipesh

7

在字符串的开头和结尾添加额外的[],将其转换为数组。然后使用eval()或某些安全的JSON序列化程序将字符串序列化,使其成为真正的JavaScript数据类型。

你应该使用https://github.com/douglascrockford/JSON-js代替eval()。如果你只是做一些快速的调试/测试,才应该使用eval


5
如果您正在使用jQuery,可以使用它的parseJSON函数,这比JavaScript本身的eval()函数更可取。请参考此链接

2

我知道很多人会建议使用eval。但是,eval()函数会调用编译器,这可能会带来一系列安全风险。因此,在可以避免使用eval的情况下,最好不要使用它。相比之下,parse函数提供了更加安全的替代方案。


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