Recherche d'un objet dans le JSON

{"widget": { "debug": "on", "window": { "title": "Sample Konfabulator Widget", "name": "main_window", "width": 500, "height": 500 }, "image": { "src": "Images/Sun.png", "name": "sun1", "hOffset": 250, "vOffset": 250, "alignment": "center" }, "text": { "data": "Click Here", "size": 36, "style": "bold", "name": "text1", "hOffset": 250, "vOffset": 100, "alignment": "center", "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;" } }} 

Voici ma chaîne JSON. Maintenant, je veux rechercher le nom dans ce JSON, puis afficher les résultats …

Iterate à travers les clés: (amélioration de la réponse d'Amit Gupta)

 var result = []; getNames(data, "name"); document.write("result: " + result.join(", ")); function getNames(obj, name) { for (var key in obj) { if (obj.hasOwnProperty(key)) { if ("object" == typeof(obj[key])) { getNames(obj[key], name); } else if (key == name) { result.push(obj[key]); } } } } 

Démonstration de travail @ http://jsfiddle.net/roberkules/JFEMH/

Vous pouvez itérer récursivement sur tous les objets à l'intérieur de l'objet donné.

  s = ""; function recursiveSearch(obj, name){ if(typeof(obj)==="object" { for(var key in obj) { if (obj.hasOwnProperty(key)) { s += ":" + recursiveSearch(obj[key], name); } } else if( typeof(obj["name"] != 'undefined') { s += ":" + obj["name"]; } 

La sortie sera des valeurs séparées par deux points avec la clé "nom"

Vous pouvez utiliser Jquery pour analyser JSON

  $.ajax({ type: "POST", url: "../JSON Source", success: function(msg) { var obj=jQuery.parseJSON(msg); if(obj.debug== "on"){ //do anything 

. . . . .

Je recommande d'utiliser cette extension JSON. Il vous permet d'utiliser JQuery pour rechercher une clé dans un objet JSON.

Au lieu d'écrire des fonctions de recherche personnalisées, vous pouvez utiliser DefiantJS ( http://defiantjs.com ) qui permet des requêtes sur des structures JSON avec des expressions XPath. Exemple:

  var data = { "widget": { "debug": "on", "window": { "title": "Sample Konfabulator Widget", "name": "main_window", "width": 500, "height": 500 }, "image": { "src": "Images/Sun.png", "name": "sun1", "hOffset": 250, "vOffset": 250, "alignment": "center" }, "text": { "data": "Click Here", "size": 36, "style": "bold", "name": "text1", "hOffset": 250, "vOffset": 100, "alignment": "center", "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;" } } }, res = JSON.search( data, '//image[name]' ); console.log( res[0].name ); 

Voici un violon de travail:
http://jsfiddle.net/hbi99/CRTz9/

DefiantJS étend l'objet global JSON avec la méthode "recherche" et renvoie un tableau avec les correspondances (tableau vide si aucune correspondance n'a été trouvée).