>백엔드 개발 >C++ >중첩된 JObject 계층 구조 내에서 이름으로 특정 JToken을 효율적으로 찾는 방법은 무엇입니까?

중첩된 JObject 계층 구조 내에서 이름으로 특정 JToken을 효율적으로 찾는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-31 12:16:10618검색

How to Efficiently Find Specific JTokens by Name within a Nested JObject Hierarchy?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.