1

私はJsonPathを試しています。素晴らしいのですが、特殊なケースに問題があります。ここで検索しましたが、解決策が見つかりませんでした。

したがって、私の JSON ファイルは以下のとおりです。

 [
        {
            "id": 1,
            "images": [
                { "id": 1,"url": "http://url1.jpg" },
                { "id": 2,"url": "http://url2.jpg" }
            ]
        },
        {
            "id": 2,
            "images": [
                { "id": 1,"url": "http://url3.jpg" },
                { "id": 2,"url": "http://url4.jpg" }
            ]
        },
        {
            "id": 3,
            "images": [
                { "id": 1,"url": "http://url5.jpg" },
                { "id": 2,"url": "http://url6.jpg" }
            ]
        }
    ]

この式$.[?(@.id=='2')]では、結果は

[
  {
    "id": 2,
    "images": [
      {
        "id": 1,
        "url": "http://url3.jpg"
      },
      {
        "id": 2,
        "url": "http://url4.jpg"
      }
    ]
  },
  {
    "id": 2,
    "url": "http://url2.jpg"
  },
  {
    "id": 2,
    "url": "http://url4.jpg"
  },
  {
    "id": 2,
    "url": "http://url6.jpg"
  }
]

しかし、クエリの結果を子なしで 1 つのレベルに制限する必要があります。最後の 3 つの要素は必要ありません。最初の要素だけが必要です。

{
    "id": 2,
    "images": [
      {
        "id": 1,
        "url": "http://url3.jpg"
      },
      {
        "id": 2,
        "url": "http://url4.jpg"
      }
    ]
  }
4

1 に答える 1

0

私のコメントで示唆されているように、さまざまな JSONPath ライブラリの実装には微妙な違いがあります。手元のライブラリによっては、同じ構文でも同じ結果が得られる場合とそうでない場合があります。

それにもかかわらず、ルート記号の後にドットを削除することで、クエリが期待どおりに機能するように調整できます。

$[?(@.id===2)]

注: Goessner の JavaScript 実装を使用して上記のパスをテストしました。C# に相当するものは次のようになります$[?(@.id==2)]

于 2021-10-28T16:22:04.407 に答える