2012-07-30 7 views
1

J'ai généré un objet JavaScript (appelez-le 'jItems') en utilisant $.getJSON. Sur la page, j'ai une liste de catégories dans lesquelles les éléments de jItems s'inscrivent. Mon désir est de cliquer sur une catégorie et de déclencher une fonction pour afficher uniquement les éléments de cette catégorie. Serait-il préférable d'utiliser getJson ou jquery each() ou find() pour tirer les bons éléments de jItems?Quelle est la meilleure façon d'analyser une chaîne JSON?

+1

'getJson' tire une chaîne JSON à partir du serveur. N'auras-tu pas besoin de l'utiliser de toute façon? – pb2q

+1

Stockez les résultats d'un appel 'getJSON', puis analysez les parties dont vous avez besoin en cliquant sur ... – TheZ

+1

' .find() 'est uniquement pour les éléments DOM. –

Répondre

1

Tout dépend de la façon dont vos données ressemble mais cela pourrait vous aider, je pense:

var jsonCats = [ 
    {"id": "category1", "items": [{"iid":"item1"}, {"iid":"item2"}, {"iid":"item3"}]}, 
    {"id": "category2", "items": [{"iid":"item4"}, {"iid":"item5"}, {"iid":"item6"}]}, 
    {"id": "category3", "items": [{"iid":"item7"}, {"iid":"item8"}, {"iid":"item9"}]}, 
    {"id": "category4", "items": [{"iid":"item0"}]} 
]; 

$.each(jsonCats, function(key, value) { 
    var category = $("<li>" + this.id + "</li>"); 
    var items = this.items; 

    $("#categories").append(category); 

    category.click(function() { 
     $("#items").empty(); 
     for (var j in items) { 
      var item = $("<option>" + items[j].iid + "</option>"); 

      $("#items").append(item); 
     } 
    }); 
}); 

Pour voir un exemple: http://jsfiddle.net/tive/U63EY/

EDIT: Maintenant, je lis à nouveau votre question. .. il est en fait préférable d'utiliser pour les boucles, car c'est plus rapide. $ .each() est un wrapper de la boucle for de toute façon. (D'où l'exemple: D)

http://jsperf.com/jquery-each-vs-for-loop/6

1

La beauté de JSON est que vous n'avez pas besoin de l'analyser. C'est déjà un objet JavaScript. Ce que vous devez faire est parcourir les valeurs et construire la sortie pour votre liste de catégories.

Sans voir votre structure JSON je ne peux plus faire de recommandations.

+1

Vous voulez dire, la beauté de '$ .getJSON', non? (JSON est une valeur de chaîne qui doit être analysée par 'JSON.parse()' ou par une fonction analogue, afin d'obtenir la valeur de l'objet correspondant.) –

+1

Ceci n'est nécessaire que si l'extraction est effectuée via AJAX. JSON lui-même ne l'exige pas. –

+3

Je pense que vous confondez JSON avec la notation littérale d'objet de JavaScript. Exemple: 'var json = '{" foo ": 123}'; var obj = {toto: 123}; '. JSON est, par définition, une chaîne (valeur). Il doit d'abord être analysé dans une valeur d'objet. Si ce que vous voulez dire n'est pas une chaîne, alors ce n'est pas JSON. –

Questions connexes