78 votes

Comment rechercher dans un arbre JSON avec jQuery

J'ai une question sur la recherche d'informations spécifiques dans le JSON. Par exemple, j'ai ce fichier JSON:

  {
    "people": {
        "person": [
            {
                "name": "Peter",
                "age": 43,
                "sex": "male"
            }, {
                "name": "Zara",
                "age": 65,
                "sex": "female"
            }
        ]
    }
}
 

Ma question est la suivante: comment trouver une personne en particulier par son nom et afficher son âge avec jQuery? Par exemple, je souhaite rechercher dans le code JSON une personne appelée Peter et lorsque je trouve une correspondance, je souhaite afficher des informations supplémentaires sur cette correspondance (à propos de la personne nommée Peter dans ce cas), telle que l'âge de la personne, par exemple.

103voto

ifaour Points 29213
 var json = {
    "people": {
        "person": [{
            "name": "Peter",
            "age": 43,
            "sex": "male"},
        {
            "name": "Zara",
            "age": 65,
            "sex": "female"}]
    }
};
$.each(json.people.person, function(i, v) {
    if (v.name == "Peter") {
        alert(v.age);
        return;
    }
});
 

Exemple

Sur la base de cette réponse , vous pourriez utiliser quelque chose comme:

 $(function() {
    var json = {
        "people": {
            "person": [{
                "name": "Peter",
                "age": 43,
                "sex": "male"},
            {
                "name": "Zara",
                "age": 65,
                "sex": "female"}]
        }
    };
    $.each(json.people.person, function(i, v) {
        if (v.name.search(new RegExp(/peter/i)) != -1) {
            alert(v.age);
            return;
        }
    });
});
 

Exemple 2

21voto

Tapefreak Points 490

J'ai trouvé l'exemple de ifQuery.each () de ifaour utile, mais j'ajouterais que jQuery.each () peut être cassé (c'est-à-dire arrêté) en renvoyant false au point où vous avez trouvé ce que vous recherchez:

 $.each(json.people.person, function(i, v) {
        if (v.name == "Peter") {
            // found it...
            alert(v.age);
            return false; // stops the loop
        }
});
 

12voto

Ali Points 192

Vous pouvez utiliser Jsel - https://github.com/dragonworx/jsel.

Il utilise un vrai moteur XPath et est hautement personnalisable. Fonctionne dans les deux Node.js et le navigateur.

Compte tenu de votre question initiale, vous trouverez les gens par leur nom avec:

// include or require jsel library (npm or browser)
var dom = jsel({
    "people": {
        "person": [{
            "name": "Peter",
            "age": 43,
            "sex": "male"},
        {
            "name": "Zara",
            "age": 65,
            "sex": "female"}]
    }
});
var person = dom.select("//person/*[@name='Peter']");
person.age === 43; // true

Si vous vous étiez toujours en train de travailler avec le même schéma JSON, vous pouvez créer votre propre schéma avec jsel, et être en mesure d'utiliser de courtes expressions comme:

dom.select("//person[@name='Peter']")

9voto

Martin Schuhfuß Points 677

Il y a quelques js-bibliothèques, qui pourraient vous aider avec elle:

Vous pouvez également jeter un oeil à Lawnchair, qui est un JSON-Document de Magasin qui fonctionne dans le navigateur et a toutes sortes d'interroger les mécanismes.

9voto

DuckMaestro Points 4941

Une fois que le fichier JSON est chargé dans un objet JavaScript, il ne s'agit plus d'un problème jQuery, mais d'un problème JavaScript. En JavaScript, vous pouvez par exemple écrire une recherche telle que:

 var people = myJson["people"];
var persons = people["person"];
for(var i=0; i < persons.length; ++i) {
    var person_i = persons[i];
    if(person_i["name"] == mySearchForName) {
        // found ! do something with 'person_i'.
        break;
    }
}
// not found !
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X