Объединить вложенные поля - PullRequest
0 голосов
/ 20 июня 2019

Я пытаюсь объединить два свойства для списка объектов.

Ввод

{
    "image": "golang:1.3",
    "unapproved": [
        "CVE-2016-5421",
        "CVE-2019-5010"
    ],
    "vulnerabilities": [
        {
            "featurename": "curl",
            "featureversion": "7.38.0-4+deb8u2",
            "vulnerability": "CVE-2016-5421",
            "namespace": "debian:8",
            "description": "Use-after-free vulnerability in libcurl before 7.50.1 allows attackers to control which connection is used or possibly have unspecified other impact via unknown vectors.",
            "link": "https://security-tracker.debian.org/tracker/CVE-2016-5421",
            "severity": "High",
            "fixedby": "7.38.0-4+deb8u4"
        },
        {
            "featurename": "python2.7",
            "featureversion": "2.7.9-2",
            "vulnerability": "CVE-2019-5010",
            "namespace": "debian:8",
            "description": "Test description",
            "link": "https://security-tracker.debian.org/tracker/CVE-2019-5010",
            "severity": "Unknown",
            "fixedby": ""
        }
    ]
}

Желаемый вывод

Верхний уровень image свойство должно использоваться в качестве префикса для description каждого объекта в списке vulnerabilities.

{
  "image": "golang:1.3",
  "unapproved": [
    "CVE-2016-5421",
    "CVE-2019-5010"
  ],
  "vulnerabilities": [
    {
      "featurename": "curl",
      "featureversion": "7.38.0-4+deb8u2",
      "vulnerability": "CVE-2016-5421",
      "namespace": "debian:8",
      "description": "golang:1.3 - Use-after-free vulnerability in libcurl before 7.50.1 allows attackers to control which connection is used or possibly have unspecified other impact via unknown vectors.",
      "link": "https://security-tracker.debian.org/tracker/CVE-2016-5421",
      "severity": "High",
      "fixedby": "7.38.0-4+deb8u4"
    },
    {
      "featurename": "python2.7",
      "featureversion": "2.7.9-2",
      "vulnerability": "CVE-2019-5010",
      "namespace": "debian:8",
      "description": "golang:1.3 - Test description",
      "link": "https://security-tracker.debian.org/tracker/CVE-2019-5010",
      "severity": "Unknown",
      "fixedby": ""
    }
  ]
}

Текущая попытка

Мой текущий фильтр:

{image, unapproved, vulnerabilities: [{description: (.image + " - " + .vulnerabilities[].description)}] }

Выход

{
  "image": "golang:1.3",
  "unapproved": [
    "CVE-2016-5421",
    "CVE-2019-5010"
  ],
  "vulnerabilities": [
    {
      "description": "golang:1.3 - Use-after-free vulnerability in libcurl before 7.50.1 allows attackers to control which connection is used or possibly have unspecified other impact via unknown vectors."
    },
    {
      "description": "golang:1.3 - Test description"
    }
  ]
}

К сожалению, я получаю только поле description с моим текущим фильтром.Мне нужен полный объект уязвимости с измененным полем description.

Вопрос

Как можно объединить вложенное поле и сохранить другие свойства объекта тоже?

jqPlay

1 Ответ

2 голосов
/ 20 июня 2019

Самое простое решение, вероятно, будет:

.image as $prefix
| .vulnerabilities[].description |= $prefix + " - " + .

Словом: обновите все значения .description, используя .image, как показано.

Эквивалентно, а возможно и менее эзотерически:

.image as $prefix
| .vulnerabilities |= map(.description |= $prefix + " - " + .)
...