Добавить элемент в массивы, которые являются значениями для данного имени ключа (json преобразование с помощью jq) - PullRequest
2 голосов
/ 30 апреля 2020

Я jq newb ie, и я пытаюсь преобразовать json (Swagger spe c). Я хочу добавить элемент к значению массива ключей «параметра»:

{
  ...
  "paths": {
    "/great/endpoint1": {
      "get": {
        "parameters": [] <<--- add a value here
       }
    }
    "/great/endpoint2": {
      "post": {
        "parameters": [] <<-- and here too here too etc.
  ....

Следующий jqplay почти работает. Он добавляет значения к правым массивам, но у него есть неприятный побочный эффект, заключающийся в удалении значения «x-id» из root ввода json. Это, вероятно, из-за неисправного условия if. Поскольку пути содержат переменную строку (имена конечных точек), я не знаю, как написать выражение пути с подстановочными знаками, чтобы обратиться к ним, поэтому я попытался использовать walk вместо: https://jqplay.org/s/az56quLZa3

1 Ответ

1 голос
/ 01 мая 2020

Поскольку пример данных неполный, трудно сказать точно, что вы ищете, но похоже, что вы должны использовать parameters в вызове для ходьбы:

walk(if type=="object" and has("parameters")
     then .parameters += [{"extra": "value"}]
     else . end)

Если вы хотите чтобы ограничить прогулку до верхнего уровня paths, вы должны предварять сказанное выше: .paths |=

...