我正在从隐藏的html输入字段中检索一个对象数组。我得到的字符串是:
"{"id":"1234","name":"john smith","email":"jsmith@blah.com"},{"id":"4431","name":"marry doe","email":"mdoe@blah.com"}"
现在我需要再次将其作为对象数组传递。如何将此字符串转换为对象数组?
答案 0 :(得分:12)
var array_of_objects = eval("[" + my_string + "]");
这会将字符串作为代码执行,这就是我们需要添加[]以使其成为对象的原因。这也是eval作为最快和最简单方法的少数合法用途之一。 :d
答案 1 :(得分:7)
假设str
包含有效的JSON语法,您只需调用eval(str)
。
出于安全考虑,最好使用JSON parser,如下所示:
JSON.parse(str);
请注意,str
必须包含在[]
中才能成为有效的JSON数组。
答案 2 :(得分:1)
有许多格式错误的字符串对象,从API GET,旧代码等。格式错误并不意味着它会丢弃代码中的错误,但是会导致输入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 }
答案 3 :(得分: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);
}