将javascript字符串转换为数组

将javascript字符串转换为数组,javascript,arrays,literals,string-literals,Javascript,Arrays,Literals,String Literals,我正在从一个隐藏的html输入字段中检索一个对象数组。我得到的字符串是: "{"id":"1234","name":"john smith","email":"jsmith@blah.com"},{"id":"4431","name":"marry doe","email":"mdoe@blah.com"}" 现在我需要再次将其作为对象数组传递。如何将该字符串转换为对象数组?假设str持有有效的JSON语法,您只需调用eval(str) 出于安全原因,最好使用如下所示的: JSON.parse

我正在从一个隐藏的html输入字段中检索一个对象数组。我得到的字符串是:

"{"id":"1234","name":"john smith","email":"jsmith@blah.com"},{"id":"4431","name":"marry doe","email":"mdoe@blah.com"}"

现在我需要再次将其作为对象数组传递。如何将该字符串转换为对象数组?

假设
str
持有有效的JSON语法,您只需调用
eval(str)

出于安全原因,最好使用如下所示的:

JSON.parse(str);
请注意,
str
必须包装在
[]
中才能成为有效的JSON数组

var array_of_objects = eval("[" + my_string + "]");
这将以代码的形式执行字符串,这就是为什么我们需要添加[]使其成为一个对象。这也是eval为数不多的合法用途之一,因为它是最快、最简单的方法D

var str=eval([{'id':'1','txt':'name1'},{'id':'2','txt':'name2'},{'id':'3','txt':'name3'})
var str=eval([{'id':'1','txt':'name1'},{'id':'2','txt':'name2'},{'id':'3','txt':'name3'}])
for(var i=0;i<str.length;i++)
{
alert(str[i].txt);
}

对于(var i=0;i有许多格式错误的字符串对象、从API获取的字符串、旧代码等。格式错误并不意味着它会删除代码中的错误,而是会删除JSON.parse()的输入错误

有一个解决方案:

// Convert any-formatted object string to well formatted object string:
var str = "{'a':'1',b:20}";
console.log( eval( "JSON.stringify( " + str + ", 0, 1 )" ) );

/* 
"{
 "a": "1",
 "b": 20
}"
*/

// Convert any-formatted object string to object:
console.log( JSON.parse(  eval( "JSON.stringify( " + str + ", 0, 1 )" ) ) );
// Object { a: "1", b: 20 }

仅供参考,如果您使用的是JSON解析器库,也可以使用JSON.parse方法。谢谢
// Convert any-formatted object string to well formatted object string:
var str = "{'a':'1',b:20}";
console.log( eval( "JSON.stringify( " + str + ", 0, 1 )" ) );

/* 
"{
 "a": "1",
 "b": 20
}"
*/

// Convert any-formatted object string to object:
console.log( JSON.parse(  eval( "JSON.stringify( " + str + ", 0, 1 )" ) ) );
// Object { a: "1", b: 20 }