2010-05-22 8 views
4

Je collectionne en série des informations à partir de formulaires dans des tableaux comme ceci:fusion tableaux javascript pour JSON

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

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

Je veux les combiner en quelque chose (je peux avoir des accolades où j'ai besoin entre parenthèses) comme:

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

pour que je puisse y accéder comme:

alert(list_all.first_round.name) -> John 

(note: le nom des valeurs ("nom", "email", "couleur") dans les deux liste les arguments ne sont pas tout à fait les mêmes, le nombre d'éléments dans chaque liste est limité mais inconnu à l'avance; Je dois ajouter en série un seul tableau à la structure précédente à chaque tour et il peut y avoir un certain nombre de tours, c'est-à-dire "troisième tour": {...}, "quatrième tour": {...} et ainsi de suite En fin de compte, je voudrais qu'il soit bien analysé pour JSON. J'utilise la librairie jquery, si cela peut vous aider.

+0

Sur un Sidenote, si vous énumérer les propriétés de list_all comme dans 'pour (clé var dans list_all)', l'ordre de les propriétés ne sont pas garanties. Vous pouvez obtenir "second_round" avant "first_round" même si "first_round" a été défini en premier. Utilisez un tableau à la place si vous voulez que la commande soit conservée. Voir - http://stackoverflow.com/questions/648139/is-the-order-of-fields-in-a-javascript-object-predicatble-when-looping-through-th – Anurag

+0

Mais quand est l'ordre des propriétés sur un objet important d'une manière quelconque? Si l'ordre est important, alors Array est le type à utiliser. –

+0

@Sean - Lorsque vous voulez un accès direct aux éléments avec une clé, mais en même temps, vous voulez parcourir tous les éléments dans l'ordre. Il n'est pas absurde de penser que quelqu'un pourrait le vouloir - Ruby a changé l'implémentation de Hash en 1.9 pour garantir la commande parce que quelqu'un le voulait. – Anurag

Répondre

1

Créer list_all comme un nouvel objet comme suit:

var list_all = {}; 
list_all[identifier_1] = list_1; 
list_all[identifier_2] = list_2; 
// ... 
+0

+1 - Peut-être vaut-il la peine de noter que pour json valide (comme OP semble vouloir), la bibliothèque json2 peut être utilisée. 'JSON.stringify (list_all)' http://www.json.org/json2.js – user113716

+0

Toutes les heures que j'ai passées là-dessus - d'une façon ou d'une autre j'ai raté celui-ci: a fonctionné parfaitement, merci! – Nat

0

utilisations JSON objet notation littérale. La forme:

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

est exactement la même chose (pour toutes fins utiles) comme:

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

Est-ce que vous aide?

Vous pouvez également utiliser

person["age"] 

c'est le même que

person.age 

et itérer propriétés nommées:

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

Vous pouvez transmettre des données sous forme de chaîne, en utilisant pour interagir avec le serveur et le convertir en un objet, en utilisant jQuery. Ex:

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

Rechercher JSON dans l'API jQuery docs: http://api.jquery.com/