2010-06-16 4 views
2

J'ai fait une simple classe javascript comme ceci:Création d'un tableau json et d'éléments json avec jquery?

function Horse() { 
    this.color = 'brown'; 
    this.speed = 'somewhat slow'; 
} 

Je joint quelques cas à certains éléments, comme ceci:

$("#horse1").data('d', new Horse()); 
$("#horse2").data('d', new Horse()); 
$("#horse3").data('d', new Horse()); 

maintenant je veux créer un tableau JSON avec une représentation JSON de chaque objet cheval. Donc, je fais ceci:

// How do I create an empty JSON array here?: 
var myJsonArray = ?; 

var children = $("#horses").children(); 
for (var i = 0, m = children.size(); i < m; i++) { 
    var panel = children[i]; 
    var horse = $(panel).data('h'); 

    // And how do I create a JSON rep of my horse here? 
    var myJsonHorse = new JsonHorse(?); 

    // Finally, how do I add it to the json array? 
    myJsonArray.push(myJsonHorse); 
} 

ouais mon objectif final est d'avoir un seul tableau JSON de tous les chevaux après itérer sur tous les enfants - pas sûr si cela doit être fait dans la plaine javascript ou jquery?

Merci

Modifier ------------------- ----------------

Désolé , mon but final est de convertir le tableau en une chaîne, donc j'ai un grand tableau json converti en une chaîne que je peux soumettre à un appel ajax qui sera traité par mon serveur.

+0

Que faites-vous avec l'objet par la suite? Un tableau normal semble être approprié ici, donc je ne suis pas sûr de ce que vous cherchez et de la fin de la partie. –

+0

Oh ouais je veux en faire une longue chaîne json donc je peux l'utiliser dans un appel ajax, merci. – user246114

Répondre

4

Pour déclarer un tableau que vous avez juste besoin Array notation littérales:

var myArray = []; 

La méthode push fonctionnera sans problèmes.

Une autre possibilité est d'utiliser la méthode $.map:

var myArray = $("#horses").children().map(function (index, el) { 
    return $(el).data('d'); 
}).get(); 
// Will return an array containing: 
// [{"color":"brown","speed":"somewhat slow"}, 
// {"color":"brown","speed":"somewhat slow"}, 
// {"color":"brown","speed":"somewhat slow"}] 

Vérifiez un exemple here.

ensuite de convertir ce tableau à une chaîne JSON, vous pouvez utiliser la méthode JSON.stringify (disponible en mode natif sur presque tous les navigateurs, pour IE 8 < vous pouvez utiliser json2.js).

+0

+1 - Non, cela fait une énorme différence, mais '$ .data (el, 'd')' serait beaucoup plus efficace dans ce cas, pas besoin de créer les wrappers jQuery sauf si vous en avez besoin. –

+0

Cela ressemble à peu près à ce dont j'ai besoin, mais comment puis-je faire une chaîne de ce tableau? Je veux l'envoyer à un script côté serveur, et j'espère le désérialiser côté serveur pour fonctionner sur les différents objets de cheval là-bas, merci. – user246114

+0

@ user246114: Vous devez utiliser la méthode 'JSON.stringify' pour convertir ce tableau et les éléments d'objet qu'il a en JSON, cette méthode est disponible nativement sur tous les navigateurs sauf IE <= 7, vous pouvez ajouter le [json2.js ] (http://www.json.org/json2.js) bibliothèque sur votre page pour le faire fonctionner sur IE <= 7. – CMS