Heim > Backend-Entwicklung > C++ > Wie kann man innerhalb einer Newtonsoft.Json JObject-Hierarchie effizient nach JTokens nach Namen suchen?

Wie kann man innerhalb einer Newtonsoft.Json JObject-Hierarchie effizient nach JTokens nach Namen suchen?

DDD
Freigeben: 2025-01-04 13:39:39
Original
454 Leute haben es durchsucht

How to Efficiently Search for JTokens by Name within a Newtonsoft.Json JObject Hierarchy?

Suche nach einem JToken anhand des Namens in einer JObject-Hierarchie

Beim Arbeiten mit JSON-Daten mithilfe der Newtonsoft.Json-Bibliothek können Situationen auftreten Hier müssen Sie bestimmte JTokens innerhalb einer komplexen Hierarchie von JObjects und JArrays finden. Diese Aufgabe kann zu einer Herausforderung werden, insbesondere wenn der Standort des Ziel-Tokens nicht explizit bekannt ist.

Eingebaute Funktionalität

Während die Newtonsoft.Json-Bibliothek keine spezifische Funktion bereitstellt Obwohl Sie eine Methode wie GetJTokenByName zum Suchen von Token nach Namen verwenden, bietet sie eine alternative Möglichkeit, mithilfe der SelectToken-Methode zu Token zu navigieren. Mit dieser Methode können Sie die JObject-Hierarchie durchlaufen und Token basierend auf ihrem Pfad auswählen. Um beispielsweise den Wert des Text-Tokens in der verschachtelten Distanzeigenschaft zu erhalten, können Sie die folgende Syntax verwenden:

string distanceText = jObject.SelectToken("routes[0].legs[0].distance.text").ToString();
Nach dem Login kopieren

Rekursive Methode für umfangreiche Suche

Wenn Sie eine umfassendere Suche benötigen, die alle Vorkommen eines Tokens mit einem bestimmten Namen identifiziert, ist eine rekursive Methode erforderlich. Eine solche Methode sollte alle JTokens und JArrays innerhalb des JObjects untersuchen, einschließlich verschachtelter Strukturen. Nachfolgend finden Sie eine mögliche Implementierung einer rekursiven Suchmethode in C#:

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

Demo und Ausgabe

Um den rekursiven Ansatz zu demonstrieren, betrachten Sie die folgende JSON-Antwort:

{
    "routes": [
        {
            "bounds": {...},
            "legs": [
                {
                    "distance": { "text": "1.7 km", "value": 1729 },
                    "duration": {...}
                },
                {
                    "distance": { "text": "2.3 km", "value": 2301 },
                    "duration": {...}
                }
            ]
        }
    ]
}
Nach dem Login kopieren

Mit der rekursiven FindTokens-Methode können Sie nach allen Vorkommen des Textes suchen Token:

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

Dies gibt Folgendes aus:

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

Fazit

Durch die Verwendung integrierter Methoden wie SelectToken oder die Implementierung eines Mithilfe des rekursiven Suchalgorithmus können Sie bestimmte JTokens effektiv in komplexen JSON-Strukturen finden. Die Wahl des Ansatzes hängt von der Komplexität der JSON-Hierarchie und der Häufigkeit des Auftretens des Ziel-Tokens ab.

Das obige ist der detaillierte Inhalt vonWie kann man innerhalb einer Newtonsoft.Json JObject-Hierarchie effizient nach JTokens nach Namen 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage