如果我想根据描述进行过滤,我的JSON路径会是什么样子

0aydgbwb  于 2023-10-21  发布在  其他
关注(0)|答案(1)|浏览(94)
[
  {
  
    "name": "NeWgR34",
    "path": "/NeWgR34",
    "attributes": {
      "description": [
        "De5cr$p(0#.,"
      ]
    }
  },
  {
   
    "name": "Newgroup",
    "path": "/Newgroup",
    "attributes": {
      "description": [
        "New group description"
      ]
    }
  }
]

我想过滤描述...对于像name这样的过滤,它是这样的:$..[?(@.name == 'Newgroup')].
我试过$..[?(@.attributes.description == 'Newgroup')],但它不工作。

jrcvhitl

jrcvhitl1#

$..[?(@.name == 'Newgroup')]
这将是更正确的,但你可能不需要..。这是一个递归搜索,看起来你的数据是非常明确和平坦的。为此,您只需删除..

$[?(@.name == 'Newgroup')]

@.attributes.description == 'Newgroup'
这里有几个问题。
1.您没有任何与此匹配的数据,因为"NewGroup"值位于@.name属性中。您需要将相对路径(@.attributes.description)与可能出现在那里的值进行比较。

  1. @.attributes.description处的值是一个数组,因此与字符串进行比较不会产生任何结果。
    您需要使用嵌套路径来实现此功能。
    您需要@.attributes.description包含"New group description"值的任何项目。
$[[email protected][?@=='New group description']]

下面是分解:

$                                   // start at the root
 [?                                 // find elements where (*)
   @.attributes.description         // this value
    [?                              // has a value where (**)
      @=='New group description'    // the value is 'New group description'
    ]
 ]
  • 即将到来的IETF规范不需要表达式的括号。
    **因为这个内部路径不与任何东西进行比较(没有比较运算符),所以它成为一个存在表达式。因此,如果 anything 匹配,则返回节点。

你可以在我的操场上看到这个。

相关问题