サブ要素の条件に基づいてjsonpathを使用してルート要素を取得する

Aug 18 2020

私はJaywayJsonPathライブラリを使用して、phoneNumbersタイプが「iPhone」であるJSONの下から正しい「id」を取得しています。

一般に、サブJSONオブジェクトで特定の条件が指定されている場合に、ブロックのルート要素から何かを見つける方法を知りたいです。

iPhoneタイプに関連付けられたブロックとIDのリストをそれぞれ選択する以下の式を試しましたidが、電話タイプがiPhoneであるJSONオブジェクトに属するルート要素に到達できません。誰かが私を案内してもらえますか?idこの質問では、as1を取得する必要があります。

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


編集

それはのように見えるのJava JsonPathの多くの機能をサポートしているライブラリ(私はあなたがこれを使っていると思います)。はリストされていませんcontains()が、anyof演算子を試してみてください。

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

これは間違いなく実装固有であり、他のライブラリでは機能しない可能性があることに注意してください。