将JavaScript字符串转换为数组

5
我正在从一个隐藏的HTML输入字段中检索对象数组。我得到的字符串是:
"{"id":"1234","name":"john smith","email":"jsmith@blah.com"},{"id":"4431","name":"marry doe","email":"mdoe@blah.com"}"

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

14
var array_of_objects = eval("[" + my_string + "]");

这将字符串作为代码执行,因此我们需要添加[]使其成为一个对象。这也是eval的少数合法用途之一,因为它是最快和最简单的方法。 :D


顺便提一下,如果你正在使用JSON解析库,你也可以使用JSON.parse方法。谢谢SLaks。https://dev59.com/-U3Sa4cB1Zd3GeqPu2d-#2710558 - dev.e.loper

9

假设str包含有效的JSON语法,您可以简单地调用eval(str)

出于安全原因,最好使用JSON解析器,如下所示:

JSON.parse(str);

请注意,为了成为有效的JSON数组,str必须用[]括起来。

1

有许多格式不良的字符串对象,从API获取、旧代码等。格式不良并不意味着它会在代码中出错,但会导致JSON.parse()输入错误。

// not " wrapped key syntax
var str = "{ a: 2 }";
console.log( JSON.parse( str ) );
//  SyntaxError: JSON.parse: expected property name or '}' at line 1 column 3 of the JSON data

// 'key', or 'value' syntax
var str = " { 'a': 2 } ";
console.log( JSON.parse( str ) );
// SyntaxError: JSON.parse: expected property name or '}' at line 1 column 3 of the JSON data

//syntax OK
var str = '{ "a": 2 }';
console.log( JSON.parse( str ) );
// Object { a: 2 }

有一个解决方案:
// 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 }

0
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);
}

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