JObject 계층 구조에서 이름으로 특정 JToken 검색
배경:
언제 복잡한 JSON 구조를 처리할 때 토큰 이름을 기반으로 특정 값을 검색해야 하는 경우가 많습니다. 내장 메소드가 없으면 어려울 수 있습니다.
내장 메소드:
안타깝게도 NewtonsoftJson 라이브러리는 JToken을 검색하는 직접적인 메소드를 제공하지 않습니다. 이름.
재귀적 방법:
이 제한을 극복하기 위해 JObject 계층 내에서 이름으로 JToken을 검색하는 재귀적 방법을 구현할 수 있습니다. 예는 다음과 같습니다.
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); } } } }
데모:
이 확장 메서드의 사용법을 보여주는 예는 다음과 같습니다.
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()); }
출력:
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
위 내용은 중첩된 JObject 계층 구조 내에서 이름으로 특정 JToken을 효율적으로 찾는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!