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"
  }
]

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

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

1 回答 1

0

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

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

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

Note: I have tested the path above using Goessner's JavaScript implementation; the C# equivalent should look like this: $[?(@.id==2)].

于 2021-10-28T16:22:04.407 回答