Используйте jq, чтобы найти элемент массива, содержащий строку - PullRequest
0 голосов
/ 30 декабря 2018

У меня есть массив «операций», из которого я хотел бы вернуть все элементы, содержащие совпадающую строку, например "w51".До сих пор все образцы, которые я нашел, имели дело с парами ключ-значение.Я использую jq '.operations[]' < file для извлечения элементов.

{
  "operations": [
    [
      "create",
      "w51",
      "rwt.widgets.Label",
      {
        "parent": "w41",
        "style": [
          "NONE"
        ],
        "bounds": [
          101,
          0,
          49,
          42
        ],
        "tabIndex": -1,
        "customVariant": "variant_pufferLabelLogout"
      }
    ],
    [
      "create",
      "w39",
      "rwt.widgets.Composite",
      {
        "parent": "w34",
        "style": [
          "NONE"
        ],
        "children": [
          "w52"
        ],
        "bounds": [
          0,
          42,
          762,
          868
        ],
        "tabIndex": -1,
        "clientArea": [
          0,
          0,
          762,
          868
        ]
      }
    ]
  ]
}

Мой ожидаемый результат при поиске элемента массива, который содержит "w51", будет таким:

[
      "create",
      "w51",
      "rwt.widgets.Label",
      {
        "parent": "w41",
        "style": [
          "NONE"
        ],
        "bounds": [
          101,
          0,
          49,
          42
        ],
        "tabIndex": -1,
        "customVariant": "variant_pufferLabelLogout"
      }
]

1 Ответ

0 голосов
/ 31 декабря 2018

Если вы используете jq версии 1.4 или более поздней, следующее должно выдать желаемый результат:

.operations[]
| select( index("w51") )

Альтернативы

Есть много альтернатив, в зависимости от того, какая у вас версия jq.Если ваш jq имеет any/0, эффективный вариант может быть следующим:

.operations[] | select( any(. == "w51" ) )
...