Как получить весь родительский узел с помощью парсера jq json? - PullRequest
0 голосов
/ 26 сентября 2018

Я пытаюсь найти значение в файле 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"
}]

Я пытаюсь найти соответствие для "name" : "redirect" внутри каждого массива behaviors, и, если он совпадает, мне нужен весь блок, включая раздел "критериев", так как вы можете видеть его под тем же блоком {}

* 1010.* Мне удалось найти значения, используя методы выбора, но не смог получить родительский раздел.

https://jqplay.org/s/BWJwVdO3Zv

Любая помощь очень ценится!

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Чтобы избежать нежелательного дублирования:

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

Эквивалентно:

.[]
| select(any(.behaviors[]; .name == "redirect"))
0 голосов
/ 26 сентября 2018

Вы можете попробовать эту команду jq:

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