Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah saya boleh mencari JToken tertentu dengan cekap mengikut nama dalam hierarki JObject bersarang dalam C# menggunakan Newtonsoft.Json?

Bagaimanakah saya boleh mencari JToken tertentu dengan cekap mengikut nama dalam hierarki JObject bersarang dalam C# menggunakan Newtonsoft.Json?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-01 07:38:11432semak imbas

How can I efficiently search for a specific JToken by name within a nested JObject hierarchy in C# using Newtonsoft.Json?

Mencari JToken Tertentu mengikut Nama dalam Hierarki JObject

Apabila bekerja dengan data JSON dalam C#, perpustakaan Newtonsoft.Json menyediakan pelbagai kaedah untuk berinteraksi dengan JObjects dan JTokens. Jika anda perlu mendapatkan JToken tertentu mengikut nama daripada hierarki JObject, anda mungkin tertanya-tanya sama ada terdapat fungsi terbina dalam yang boleh memudahkan tugas ini.

Menggunakan SelectToken() untuk Navigasi Token Spesifik

Jika anda tahu laluan tepat ke JToken yang anda mahu dapatkan semula, kaedah SelectToken() menyediakan cara langsung untuk menavigasi ke sana. Contohnya:

JObject jObject = ...;
string distanceText = jObject.SelectToken("routes[0].legs[0].distance.text").ToString();

Dalam contoh ini, kami mendapatkan semula "teks" JToken daripada sifat jarak yang bersarang dalam bahagian pertama laluan pertama.

Melaksanakan Carian Rekursif untuk Semua Token

Jika anda perlu mencari semua kejadian JToken dengan nama yang diberikan tanpa mengira lokasi dalam hierarki JObject, anda perlu melaksanakan kaedah carian rekursif. Berikut ialah satu pendekatan:

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

Kaedah ini boleh digunakan seperti berikut:

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

Output yang terhasil akan memaparkan laluan dan nilai semua JToken dengan nama "teks". Contohnya:

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 Bagaimanakah saya boleh mencari JToken tertentu dengan cekap mengikut nama dalam hierarki JObject bersarang dalam C# menggunakan Newtonsoft.Json?. 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