{"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).