Heim >Backend-Entwicklung >C++ >Wie kann man bestimmte JTokens effizient nach Namen in einer verschachtelten JObject-Hierarchie finden?

Wie kann man bestimmte JTokens effizient nach Namen in einer verschachtelten JObject-Hierarchie finden?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-31 12:16:10629Durchsuche

How to Efficiently Find Specific JTokens by Name within a Nested JObject Hierarchy?

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

Hintergrund:

Wann Beim Umgang mit komplexen JSON-Strukturen ist es häufig erforderlich, bestimmte Werte basierend auf ihren Token-Namen abzurufen. Ohne eine integrierte Methode kann dies eine Herausforderung sein.

Eingebaute Methode:

Leider bietet die NewtonsoftJson-Bibliothek keine direkte Methode zum Abrufen eines JTokens Name.

Rekursive Methode:

Zu Um diese Einschränkung zu überwinden, kann eine rekursive Methode implementiert werden, um innerhalb einer JObject-Hierarchie nach JTokens nach Namen zu suchen. Hier ist ein Beispiel:

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);
            }
        }
    }
}

Demo:

Hier ist ein Beispiel, das die Verwendung dieser Erweiterungsmethode demonstriert:

string json = @"
{
    ""routes"": [
        {
            ""bounds"": {
                ""northeast"": {
                    ""lat"": 50.4639653,
                    ""lng"": 30.6325177
                },
                ""southwest"": {
                    ""lat"": 50.4599625,
                    ""lng"": 30.6272425
                }
            },
            ""legs"": [
                {
                    ""distance"": {
                        ""text"": ""1.7 km"",
                        ""value"": 1729
                    },
                    ""duration"": {
                        ""text"": ""4 mins"",
                        ""value"": 223
                    }
                },
                {
                    ""distance"": {
                        ""text"": ""2.3 km"",
                        ""value"": 2301
                    },
                    ""duration"": {
                        ""text"": ""5 mins"",
                        ""value"": 305
                    }
                }
            ]
        }
    ]
}";

JObject jo = JObject.Parse(json);

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

Ausgabe:

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 man bestimmte JTokens effizient nach Namen in einer verschachtelten JObject-Hierarchie finden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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