dev.e.loper
dev.e.loper

Reputation: 36044

Convert javascript string to an array

I'm retrieving an array of objects from a hidden html input field. The string I'm getting is:

"{"id":"1234","name":"john smith","email":"[email protected]"},{"id":"4431","name":"marry doe","email":"[email protected]"}"

Now I need to pass this as an array of objects again. How do I convert this string into array of objects?

Upvotes: 5

Views: 19118

Answers (4)

There are many bad formatted string object, GET from API, old code, etc. Bad format doesn't means it drops error in code, but drops error for input of 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 }

There is a solution:

// 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 }

Upvotes: 1

hadi.sh
hadi.sh

Reputation: 129

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

Upvotes: 0

Gordon Gustafson
Gordon Gustafson

Reputation: 41209

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

This executes the string as code, which is why we need to add the [] to make it an object. This is also one of the few legitimate uses for eval as its the fastest and easiest way. :D

Upvotes: 14

SLaks
SLaks

Reputation: 887413

Assuming that str holds valid JSON syntax, you can simply call eval(str).

For security reasons, it's better to use a JSON parser, like this:

JSON.parse(str);

Note that str must be wrapped in [] to be a valid JSON array.

Upvotes: 9

Related Questions