如何使用 jq json 解析器获取整个父节点?

How to get entire parent node using jq json parser?

我正在尝试在 json 文件中找到一个值,基于此我需要获取整个 json 数据而不是那个特定的块。

这是我的样本json

[{
      "name" : "Redirect to Website 1",

      "behaviors" : [ {
        "name" : "redirect",
        "options" : {
          "mobileDefaultChoice" : "DEFAULT",
          "destinationProtocol" : "HTTPS",
          "destinationHostname" : "SAME_AS_REQUEST",
          "responseCode" : 302
        }
      } ],
      "criteria" : [ {
        "name" : "requestProtocol",
        "options" : {
          "value" : "HTTP"
        }
      } ],
      "criteriaMustSatisfy" : "all"
},
{
      "name" : "Redirect to Website 2",

      "behaviors" : [ {
        "name" : "redirect",
        "options" : {
          "mobileDefaultChoice" : "DEFAULT",
          "destinationProtocol" : "HTTPS",
          "destinationHostname" : "SAME_AS_REQUEST",
          "responseCode" : 301
        }
      } ],
      "criteria" : [ {
        "name" : "contentType",
        "options" : {
          "matchOperator" : "IS_ONE_OF",
          "values" : [ "text/html*", "text/css*", "application/x-javascript*" ],
        }
      } ],
      "criteriaMustSatisfy" : "all"
}]

我正在尝试匹配每个 behaviors 数组中的 "name" : "redirect",如果它匹配,那么我需要整个块,包括 "criteria" 部分,正如您可以在其下看到的阻止 {}

我设法使用 select 方法找到了值,但无法获得父部分。

https://jqplay.org/s/BWJwVdO3Zv

非常感谢任何帮助!

你可以试试这个 jq 命令:

 <file jq 'select(.[].behaviors[].name=="redirect")'

为了避免不必要的重复:

.[]
| first(select(.behaviors[].name == "redirect"))

等价于:

.[]
| select(any(.behaviors[]; .name == "redirect"))