json路径返回与 predicate 匹配的整个json

oyjwcjzk  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(380)

我有一个用例,需要json路径来返回与其 predicate 匹配的整个json结构。

{
  "store" : {
    "book" : [
      {
        "category" : "reference",
        "author" : "Nigel Rees",
        "title" : "Sayings of the Century",
        "price" : 8.95,
       },
     {
        "category" : "fiction",
        "author" : "Evelyn Waugh",
        "title" : "Sword of Honour",
        "price" : 12.99
     },
     {
        "category" : "fiction",
        "author" : "Herman Melville",
        "title" : "Moby Dick",
        "isbn" : "0-553-21311-3",
        "price" : 8.99
     },
     {
        "category" : "fiction",
        "author" : "J. R. R. Tolkien",
        "title" : "The Lord of the Rings",
        "isbn" : "0-395-19395-8",
        "price" : 22.99
     }
  ],
  "bicycle" : {
     "color" : "red",
     "price" : 19.95
  }
  },
    "expensive" : 10
}

这是我的 json path expression ```
$.store.book[?(@.category in ['reference'])]

返回

[
{
"category" : "reference",
"author" : "Nigel Rees",
"title" : "Sayings of the Century",
"price" : 8.95
}

]
但我想要整条路,如下图所示,

{
"store" : {
"book" : [
{
"category" : "reference",
"author" : "Nigel Rees",
"title" : "Sayings of the Century",
"price" : 8.95
}

    ] 

}
}

wlsrxk51

wlsrxk511#

这不是json路径通常可以做的事情,但请检查您的具体实现。
通常,json path可以返回匹配项或指向它们的路径。不支持按原始结构中的显示嵌套匹配。
然而,您可能能够从路径中推断出您需要什么。该项目的路径将是 $.store.book[0] . 要重建所需的对象,您需要。。。

$        // start, no impact
.store  // create an object with "store"
.book   // create an object with "book"
[0]     // since this is the last thing, replace this with the match

从这一点来看,如果匹配进一步深入到数组中,而不是在开始时,那么尝试支持这一点似乎会有问题。例如,如果您已匹配 [2] 而不是 [0] ,您仍然会得到与您发布的相同的嵌套结构(不是在这里讨论这是如何工作的;只是解释为什么现在没有。)

相关问题