Suchen nach einem bestimmten JToken anhand des Namens in einer JObject-Hierarchie
Beim Arbeiten mit JSON-Daten in C# bietet die Newtonsoft.Json-Bibliothek verschiedene Möglichkeiten Methoden zur Interaktion mit JObjects und JTokens. Wenn Sie ein bestimmtes JToken anhand des Namens aus einer JObject-Hierarchie abrufen müssen, fragen Sie sich möglicherweise, ob es eine integrierte Funktion gibt, die diese Aufgabe vereinfachen kann.
Verwenden von SelectToken() für die spezifische Token-Navigation
Wenn Sie den genauen Pfad zum JToken kennen, den Sie abrufen möchten, bietet die SelectToken()-Methode eine direkte Möglichkeit, dorthin zu navigieren. Zum Beispiel:
JObject jObject = ...; string distanceText = jObject.SelectToken("routes[0].legs[0].distance.text").ToString();
In diesem Beispiel rufen wir das „Text“-JToken aus der Distanzeigenschaft ab, die im ersten Abschnitt der ersten Route verschachtelt ist.
Implementieren einer rekursiven Suche für alle Tokens
Wenn Sie alle Vorkommen eines JTokens mit einem bestimmten Namen finden müssen, unabhängig von seiner Position innerhalb Um die JObject-Hierarchie zu nutzen, müssen Sie eine rekursive Suchmethode implementieren. Hier ist ein Ansatz:
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); } } } }
Diese Methode kann wie folgt verwendet werden:
foreach (JToken token in jObject.FindTokens("text")) { Console.WriteLine(token.Path + ": " + token.ToString()); }
Die resultierende Ausgabe zeigt den Pfad und Wert aller JTokens mit dem Namen „text“ an. Zum Beispiel:
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
Das obige ist der detaillierte Inhalt vonWie kann ich mithilfe von Newtonsoft.Json effizient nach einem bestimmten JToken anhand des Namens in einer verschachtelten JObject-Hierarchie in C# suchen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!