Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Cekap Mendapatkan JTokens Tertentu mengikut Nama daripada Hierarki JObject?

Bagaimana untuk Cekap Mendapatkan JTokens Tertentu mengikut Nama daripada Hierarki JObject?

Linda Hamilton
Linda Hamiltonasal
2025-01-04 15:30:41509semak imbas

How to Efficiently Retrieve Specific JTokens by Name from a JObject Hierarchy?

Merentasi Hierarki JObject untuk Token Tertentu mengikut Nama

Masalah:

Diberi respons JSON dengan hierarki kompleks JTokens, bagaimana anda boleh mendapatkan JToken tertentu dengan namanya dengan cekap?

Fungsi Terbina Dalam Newtonsoft.Json:

Newtonsoft.Json menyediakan kaedah SelectToken(), yang membenarkan navigasi terus ke token berdasarkan laluannya. Contohnya:

JToken distance = jObject.SelectToken("routes[0].legs[0].distance.text");

Ini mendapatkan semula JToken yang mewakili nilai teks jarak.

Carian Rekursif:

Jika laluan token tidak diketahui atau anda perlu mencari semua kejadian token dengan nama tertentu, carian rekursif diperlukan. Berikut ialah kaedah pembantu tersuai untuk carian rekursif:

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

Penggunaan:

string json = @"...", 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 Mendapatkan JTokens Tertentu mengikut Nama daripada Hierarki JObject?. 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