Localisation des JTokens par nom dans les hiérarchies JObject
En réponse au besoin de récupérer des JTokens spécifiques à partir de réponses JSON complexes, cet article présente une discussion sur les options disponibles au sein de la bibliothèque NewtonsoftJson et propose une solution alternative sous la forme d'un fichier récursif méthode.
Méthode NewtonsoftJson SelectToken
Bien que la bibliothèque NewtonsoftJson n'offre pas de méthode directe pour rechercher des JTokens par nom, elle fournit la méthode SelectToken(). Cette méthode vous permet de naviguer dans la hiérarchie JObject et de sélectionner les jetons en fonction de leur chemin. Par exemple, pour récupérer le JToken « texte » à partir de la réponse JSON fournie :
JObject jObject = JObject.Parse(json); string distanceText = jObject.SelectToken("routes[0].legs[0].distance.text").ToString();
Méthode de recherche de jeton récursive
Si vous avez besoin de trouver toutes les occurrences d'un JToken avec un nom précis quel que soit son emplacement, une méthode récursive est nécessaire. Voici un exemple :
public static class JsonExtensions { public static List<JToken> FindTokens(this JToken containerToken, string name) { // Initialize a list to store matching JTokens List<JToken> matches = new List<JToken>(); // Call the recursive helper method FindTokens(containerToken, name, matches); // Return the matches return matches; } private static void FindTokens(JToken containerToken, string name, List<JToken> matches) { // Recursively traverse the JObject and JArray elements switch (containerToken.Type) { case JTokenType.Object: // Check JProperties for the name and recurse on their values foreach (JProperty child in containerToken.Children<JProperty>()) { if (child.Name == name) { matches.Add(child.Value); } FindTokens(child.Value, name, matches); } break; case JTokenType.Array: // Recurse on each element of the array foreach (JToken child in containerToken.Children()) { FindTokens(child, name, matches); } break; } } }
Démo et sortie
Voici un exemple de démonstration :
// Load the JSON response string json = GetJson(); // Parse the JSON into a JObject JObject jo = JObject.Parse(json); // Find all "text" JTokens using the FindTokens method foreach (JToken token in jo.FindTokens("text")) { Console.WriteLine(token.Path + ": " + token.ToString()); }
Ce code imprime ce qui suit sortie :
routes[0].legs[0].distance.text: 1.7 km routes[0].legs[0].duration.text: 4 mins routes[0].legs[1].distance.text: 2.3 km routes[0].legs[1].duration.text: 5 mins
Conclusion
Bien que la méthode SelectToken() intégrée fournisse un moyen pratique de parcourir des chemins spécifiques dans un JObject, la méthode récursive FindTokens propose une solution pour trouver toutes les occurrences d'un JToken avec un nom donné, quel que soit son emplacement dans la hiérarchie. Le choix entre ces approches dépend des exigences spécifiques de votre application.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!