Maison > développement back-end > C++ > Comment rechercher efficacement des JTokens spécifiques par nom dans une hiérarchie JObject imbriquée ?

Comment rechercher efficacement des JTokens spécifiques par nom dans une hiérarchie JObject imbriquée ?

Mary-Kate Olsen
Libérer: 2024-12-31 12:16:10
original
679 Les gens l'ont consulté

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

Recherche d'un JToken spécifique par nom dans une hiérarchie JObject

Arrière-plan :

Quand face à des structures JSON complexes, il est souvent nécessaire de récupérer des valeurs spécifiques en fonction de leurs noms de jetons. Cela peut être difficile sans méthode intégrée.

Méthode intégrée :

Malheureusement, la bibliothèque NewtonsoftJson ne fournit pas de méthode directe pour récupérer un JToken en nom.

Méthode récursive :

Pour surmonter cela limitation, une méthode récursive peut être implémentée pour rechercher des JTokens par nom dans une hiérarchie JObject. Voici un exemple :

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);
            }
        }
    }
}
Copier après la connexion

Démo :

Voici un exemple illustrant l'utilisation de cette méthode d'extension :

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());
}
Copier après la connexion

Sortie :

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
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal