Heim > Backend-Entwicklung > C++ > Wie kann ich mithilfe von Newtonsoft.Json effizient nach einem bestimmten JToken anhand des Namens in einer verschachtelten JObject-Hierarchie in C# suchen?

Wie kann ich mithilfe von Newtonsoft.Json effizient nach einem bestimmten JToken anhand des Namens in einer verschachtelten JObject-Hierarchie in C# suchen?

Mary-Kate Olsen
Freigeben: 2025-01-01 07:38:11
Original
408 Leute haben es durchsucht

How can I efficiently search for a specific JToken by name within a nested JObject hierarchy in C# using Newtonsoft.Json?

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();
Nach dem Login kopieren

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);
            }
        }
    }
}
Nach dem Login kopieren

Diese Methode kann wie folgt verwendet werden:

foreach (JToken token in jObject.FindTokens("text"))
{
    Console.WriteLine(token.Path + ": " + token.ToString());
}
Nach dem Login kopieren

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
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage