2010-10-18 4 views
1

Mon objet JSON est construit comme ceci:En utilisant jQuery pour traiter un objet JSON

var Source = 
{ 
    Object: [ //Array 
     {Title: 'Test', Type: 'Pet', Category: 'Cat', Description: 'Fluffy', Count: 2 } 
    ] 
}; 

j'ai pu comprendre comment ajouter correctement au tableau « objet », mais je ne peux pas sembler figurer la syntaxe jQuery pour interroger l'objet en fonction de la liste de propriétés (Titre, Type, Catégorie, etc.).

Je mets du code de test dans un événement click et vérifie normalement la longueur de l'objet Source.Object (les données de test aboutissent à 2 objets) pour confirmer qu'il y a des données avec lesquelles travailler (un appel ajax).

function clickTest(category, type) { 
    $(Source).find('Object[Category=\"' + category + '\"]').each(function() { 
     alert($(this).attr('Category')); //doesn't work 
    }); 
} 

Quelle est la bonne façon d'interroger un objet JSON comme celui-ci?

+8

Je dois dire, wtf? – jAndy

+0

Deuxièmement, @jAndy O.o – jwueller

+0

Désolé, qu'est-ce que je fais mal ici? –

Répondre

7

JSON est natif de JavaScript et peut être parcouru sans utiliser de bibliothèques (jQuery). Les tableaux représentent [] et {} représentent des objets, donc:

var obj = Source.Object; 
for (var i = 0, len = obj.length; i < len; i++) { 
    if (obj[i].Category == category) 
     alert(obj[i].Category + ' ' + obj[i].Title); 
} 

Et c'est plus rapide aussi! Bon produit.

+0

J'ai toujours supposé que jQuery serait plus rapide que la construction d'une boucle javascript pour faire ces vérifications. –

+1

@C Bauer: jQuery serait plus court. Le JavaScript pur sera plus rapide (puisque les fermetures appellent des variables d'une autre portée, etc.) Après tout, jQuery est écrit en JavaScript - l'appel ne battra pas toujours une solution personnalisée. –

5

La source est un objet JSON et non un DOM HTML. Par conséquent, vous devez utiliser les fonctions utilitaires jQuery pour les tableaux:

$.grep(Source.Object, function(e) { return e.Category == category }).each(...) 
+3

"doit" semble plutôt extrême, non? :) –

+0

+1 - l'utilisation correcte (surtout) de '$ .grep()', le '.each()' après va exploser, il devrait être enveloppé dans un $ .each (...) ', puisque' .grep() 'renvoie un tableau. –

+1

Je voudrais corriger: "vous pouvez utiliser les fonctions de l'utilitaire jQuery" - ils ne sont pas nécessaires car c'est tout simplement JavaScript. –

1

JSON est un moyen de retranscrire un objet javascript dans un format de chaîne et de la transmettre sur le fil. Une bonne chose à propos du format est qu'il est directement lisible par javascript, donc votre objet Source est déjà prêt à être traité.

function processSource(source, category) 
{ 
    var counter = 0; 
    for (counter = 0; counter < source.Object.length; counter += 1) 
    { 
     if (category === source.Object[counter].category) { 
      // do something 
     } 
    } 
}