views:

115

answers:

2

I serially collect information from forms into arrays like so:

list = {"name" : "John", "email" : "[email protected]", "country" : "Canada", "color" : "blue"};  
identifier = "first_round";

list = {"name" : "Harry", "email" : "[email protected]", "country" : "Germany"};  
identifier = "second_round";

I want to combine them into something (I may have braces where I need brackets) like:

list_all = {  
"first_round" :  
 {"name" : "John", "email" : "[email protected]", "country" : "Canada", "color" : "blue"} ,  
"second_round" :  
{"name" : "Harry", "email" : "[email protected]", "country" : "Germany"}  
 };

so I can access them like:

alert(list_all.first_round.name) -> John

(Note: the name-values ("name", "email", "color") in the two list-arrays are not quite the same, the number of items in each list-array is limited but not known in advance; I need to serially add only one array to the previous structure each round and there may be any number of rounds, i.e. "third-round" : {...}, "fourth-round" : {...} and so on.)

Ultimately, I'd like it to be well-parsed for JSON.

I use the jquery library, if that helps.

+1  A: 

Create list_all as a new object as follows:

var list_all = {};
list_all[identifier_1] = list_1;
list_all[identifier_2] = list_2;
// ...
BalusC
+1 - Perhaps worth noting that for valid json (as OP seems to want), json2 library can be used. `JSON.stringify(list_all)` http://www.json.org/json2.js
patrick dw
All the hours I spent on this--somehow I missed this one: worked perfectly, thanks!
Nat
You're welcome. I see that you're new here as well. Please read [this link](http://stackoverflow.com/faq) with regard to voting and accepting answers. Keep the spirit of Stackoverflow! :)
BalusC
A: 

JSON uses object literal notation. The form:

var person = {
 "name": "Douglas Adams"
 "age": 42
};

Is exactly the same (for all intents and purposes) as:

var person = new Object();
person.name = "Douglas Adams";
person.age = 42;

Does that help you?

You can also use

person["age"]

this is the same as

person.age

and to iterate through named properties:

//prints the person.propertyName for all propertyName in person
for (var propertyName in person) {
 alert(person[propertyName]);
}

You can transmit data as a string, using it to interact with the server and converting it into an object, using jQuery. Ex:

var jsonString = "{'name': 'Douglas Adams', 'age': 42}";
jQuery.parseJson(jsonString); //returns this as an object

Search for JSON in the jQuery API docs: http://api.jquery.com/

RMorrisey