JObject 階層内の名前による JToken の検索
複雑な JSON 応答から特定の JToken を取得する必要性に応じて、この記事では説明を示します。 NewtonsoftJson ライブラリ内の利用可能なオプションについて説明し、再帰的な形式で代替ソリューションを提供します。 method.
NewtonsoftJson SelectToken Method
NewtonsoftJson ライブラリには、名前で JToken を検索するための直接メソッドは提供されていませんが、SelectToken() メソッドは提供されています。このメソッドを使用すると、JObject 階層内を移動し、パスに基づいてトークンを選択できます。たとえば、提供された JSON 応答から「テキスト」JToken を取得するには:
JObject jObject = JObject.Parse(json); string distanceText = jObject.SelectToken("routes[0].legs[0].distance.text").ToString();
Recursive Token Search Method
JToken のすべての出現を検索する必要がある場合場所に関係なく特定の名前を持つ場合は、再帰的メソッドが必要です。以下に例を示します。
public static class JsonExtensions { public static List<JToken> FindTokens(this JToken containerToken, string name) { // Initialize a list to store matching JTokens List<JToken> matches = new List<JToken>(); // Call the recursive helper method FindTokens(containerToken, name, matches); // Return the matches return matches; } private static void FindTokens(JToken containerToken, string name, List<JToken> matches) { // Recursively traverse the JObject and JArray elements switch (containerToken.Type) { case JTokenType.Object: // Check JProperties for the name and recurse on their values foreach (JProperty child in containerToken.Children<JProperty>()) { if (child.Name == name) { matches.Add(child.Value); } FindTokens(child.Value, name, matches); } break; case JTokenType.Array: // Recurse on each element of the array foreach (JToken child in containerToken.Children()) { FindTokens(child, name, matches); } break; } } }
デモと出力
サンプルのデモを次に示します。
// Load the JSON response string json = GetJson(); // Parse the JSON into a JObject JObject jo = JObject.Parse(json); // Find all "text" JTokens using the FindTokens method foreach (JToken token in jo.FindTokens("text")) { Console.WriteLine(token.Path + ": " + token.ToString()); }
このコードは次を出力します。出力:
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
結論
組み込みの SelectToken() メソッドは JObject 内の特定のパスをナビゲートする便利な方法を提供しますが、再帰的な FindTokens メソッドは次のことを提供します。階層内の位置に関係なく、指定された名前を持つすべての JToken を検索するソリューション。これらのアプローチのどちらを選択するかは、アプリケーションの特定の要件によって異なります。
以上がネストされた JObject 階層内で JToken を名前で効率的に見つけるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。