하위 요소 조건에 따라 jsonpath를 사용하여 루트 요소 가져 오기

Aug 18 2020

phoneNumbers유형이 'iPhone'인 JSON 아래에서 올바른 'id'를 얻기 위해 Jayway JsonPath 라이브러리를 사용하고 있습니다.

일반적으로 특정 조건이 하위 JSON 객체에 지정되어있을 때 블록의 루트 요소에서 무언가를 찾는 방법을 알고 싶습니다.

아래에서 iPhone 유형과 관련된 블록과 ID 목록을 각각 선택하는 표현식을 시도했지만 id내 전화 유형이 iPhone 인 JSON 개체에 속하는 루트 요소 에 도달 할 수 없습니다 . 누군가 나를 안내해 줄 수 있습니까? id이 질문에 대해 as 1 을 얻어야합니다 .

ID 목록을 얻으려면 : $[*].id

iPhone 유형에 해당하는 json 객체를 얻으려면 : $[*].phoneNumbers[?(@.type=='iPhone')]

[
    {
        "id": "1",
        "phoneNumbers": [
            {
                "type": "iPhone",
                "number": "0123-4567-8888"
            },
            {
                "type": "home",
                "number": "0123-4567-8910"
            }
        ]
    },
    {
        "id": "2",
        "phoneNumbers": [
            {
                "type": "x",
                "number": "0123-4567-8888"
            },
            {
                "type": "y",
                "number": "0123-4567-8910"
            }
        ]
    }
]

답변

gregsdennis Oct 06 2020 at 03:16

표정이 더 깊게 보이길 바라는 것 같아요.

먼저 전화 번호 목록에서 iPhone이있는 개체를 찾습니다. 그런 다음 ID를 선택하십시오.

시도해보십시오 $[?(@.phoneNumbers[*].type=="iPhone")].id.


편집하다

그것은과 같은 자바 JsonPath의 기능을 지원 라이브러리 (나는 당신이 사용하고 생각한다). 는 나열되지 않지만 연산자를 contains()시도해 볼 수 있습니다 anyof.

$[?(@.phoneNumbers[*].type anyof ["iPhone"])].id

이것은 확실히 구현에 따라 다르며 다른 라이브러리에서는 작동하지 않을 가능성이 높습니다.