Maison >développement back-end >C++ >Comment puis-je rechercher efficacement un JToken spécifique par son nom dans une hiérarchie JObject imbriquée en C# à l'aide de Newtonsoft.Json ?
Recherche d'un JToken spécifique par nom dans une hiérarchie JObject
Lorsque vous travaillez avec des données JSON en C#, la bibliothèque Newtonsoft.Json fournit divers méthodes pour interagir avec JObjects et JTokens. Si vous devez récupérer un JToken spécifique par son nom à partir d'une hiérarchie JObject, vous vous demandez peut-être s'il existe une fonction intégrée qui peut simplifier cette tâche.
Utilisation de SelectToken() pour la navigation par jeton spécifique
Si vous connaissez le chemin exact du JToken que vous souhaitez récupérer, la méthode SelectToken() fournit un moyen direct d'y accéder. Par exemple :
JObject jObject = ...; string distanceText = jObject.SelectToken("routes[0].legs[0].distance.text").ToString();
Dans cet exemple, nous récupérons le JToken « texte » de la propriété distance imbriquée dans le premier tronçon de la première route.
Implémentation d'une recherche récursive pour tous les jetons
Si vous avez besoin de trouver toutes les occurrences d'un JToken avec un nom donné quel que soit son emplacement dans le JObject hiérarchie, vous devrez implémenter une méthode de recherche récursive. Voici une approche :
public static class JsonExtensions { public static List<JToken> FindTokens(this JToken containerToken, string name) { List<JToken> matches = new List<JToken>(); FindTokens(containerToken, name, matches); return matches; } private static void FindTokens(JToken containerToken, string name, List<JToken> matches) { if (containerToken.Type == JTokenType.Object) { foreach (JProperty child in containerToken.Children<JProperty>()) { if (child.Name == name) { matches.Add(child.Value); } FindTokens(child.Value, name, matches); } } else if (containerToken.Type == JTokenType.Array) { foreach (JToken child in containerToken.Children()) { FindTokens(child, name, matches); } } } }
Cette méthode peut être utilisée comme suit :
foreach (JToken token in jObject.FindTokens("text")) { Console.WriteLine(token.Path + ": " + token.ToString()); }
La sortie résultante affichera le chemin et la valeur de tous les JTokens portant le nom « texte ». Par exemple :
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
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!