JsonPath - 将研究限制在一个级别

JsonPath - Restrict To Research to One level

我正在尝试 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"
  }
]

但是我需要将我的查询结果限制在没有 children 的一级。最后 3 个元素不是必需的。我只需要第一个元素。

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

正如我的评论中所暗示的,各种 JSONPath 库的实现存在细微差别。相同的语法可能会或可能不会产生相同的结果,具体取决于手头的库。

尽管如此,我们可以通过在根符号后删除点来调整您的查询以使其按预期工作:

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

注意:我已经使用 Goessner 的 JavaScript 实现测试了上面的路径; C# 等效项应如下所示:$[?(@.id==2)].