Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Cekap Mencari JTokens Tertentu mengikut Nama dalam Hierarki JObject Bersarang?

Bagaimana untuk Cekap Mencari JTokens Tertentu mengikut Nama dalam Hierarki JObject Bersarang?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-31 12:16:10629semak imbas

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

Mencari JToken Tertentu mengikut Nama dalam Hierarki JObject

Latar Belakang:

Apabila berurusan dengan struktur JSON yang kompleks, selalunya perlu untuk mendapatkan semula nilai tertentu berdasarkan tokennya nama. Ini boleh mencabar tanpa kaedah terbina dalam.

Kaedah Terbina dalam:

Malangnya, perpustakaan NewtonsoftJson tidak menyediakan kaedah langsung untuk mendapatkan JToken dengan nama.

Rekursif Kaedah:

Untuk mengatasi had ini, kaedah rekursif boleh dilaksanakan untuk mencari JToken mengikut nama dalam hierarki JObject. Berikut ialah contoh:

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:

Berikut ialah contoh yang menunjukkan penggunaan kaedah sambungan ini:

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

Output:

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

Atas ialah kandungan terperinci Bagaimana untuk Cekap Mencari JTokens Tertentu mengikut Nama dalam Hierarki JObject Bersarang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn