【问题标题】:JsonPath - Restrict To Research to One levelJsonPath - 将研究限制在一个级别
【发布时间】:2021-10-27 09:42:59
【问题描述】:

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

【问题讨论】:

  • 您正在尝试哪种 JSONPath 实现和语言/环境?当我使用 Jayway 的 JSONPath 对提供的 JSON 进行查询时,会返回预期的结果。
  • 感谢您的反馈我在 C# 上使用“goessner”Jsonpath
  • 我测试了 Jayway,就像你说的一样好。 “Jayway JsonPath 是 Stefan Goessner JsonPath 实现的 Java 端口。”那么为什么结果不一样呢?
  • 您是说 Atif Aziz 的 Goessner 的 JSONPath 库 (jsonpath.cs) 的 C# 端口吗?我认为这个库有点过时了,你最好使用维护更好的库,比如(Newtonsoft 的)JSON.NET 库。存在差异的原因是,没有 JSONPath 标准之类的东西,库的实现也不同。查看此比较图表,了解各种语言的大量实现之间的差异:cburgmer.github.io/json-path-comparison

标签: json-path-expression


【解决方案1】:

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

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

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

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

【讨论】:

  • 我的库是 JSON.NET。 $[?(@.id==2)] 正在工作。 C# 中的语法比 PHP/JS 更宽松,我对它们进行了比较。非常感谢您花时间向我解释。
  • @agi31 欢迎您。随意接受并支持我对您问题的回答。 stackoverflow.com/help/someone-answers
猜你喜欢
  • 2020-12-31
  • 2019-08-02
  • 2015-12-29
  • 2012-07-15
  • 2015-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-27
相关资源
最近更新 更多