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
Lepaskan: 2024-12-31 12:16:10
asal
626 orang telah melayarinya

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);
            }
        }
    }
}
Salin selepas log masuk

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());
}
Salin selepas log masuk

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
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan