Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Cekap Mendapatkan JTokens Tertentu mengikut Nama daripada Hierarki JObject?
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!