Преобразование поля авторизованного ключа в массиве с использованием jq - PullRequest
0 голосов
/ 26 февраля 2019

Учитывая следующую структуру:

[
  {
    "authorizedKey": "0",
    "description": "This key is for system testing.",
    "keyExpiration": "2035-02-02T18:28:59Z",
    "keyId": "aaa12345-1234-1234-1234-1234567890ab"
  },
  {
    "authorizedKey": "1",
    "description": "This key is for system testing.",
    "keyExpiration": "2035-02-02T18:28:59Z",
    "keyId": "bbb12345-1234-1234-1234-1234567890ab"
  },
  {
    "authorizedKey": "1",
    "description": "This key is for system testing.",
    "keyExpiration": "2035-02-02T18:28:59Z",
    "keyId": "ccc12345-1234-1234-1234-1234567890ab"
  }
]

Используя только jq, есть ли способ преобразовать его в следующую структуру?Или мне нужно обернуть это в какую-то внешнюю логику?

[
  {
    "authorizedKey": "zero",
    "description": "This key is for system testing.",
    "keyExpiration": "2035-02-02T18:28:59Z",
    "keyId": "aaa12345-1234-1234-1234-1234567890ab"
  },
  {
    "authorizedKey": "one",
    "description": "This key is for system testing.",
    "keyExpiration": "2035-02-02T18:28:59Z",
    "keyId": "bbb12345-1234-1234-1234-1234567890ab"
  },
  {
    "authorizedKey": "one",
    "description": "This key is for system testing.",
    "keyExpiration": "2035-02-02T18:28:59Z",
    "keyId": "ccc12345-1234-1234-1234-1234567890ab"
  }
]

1 Ответ

0 голосов
/ 26 февраля 2019

Это работает:

map(. + {authorizedKey: {"0": "zero", "1": "one"}[.authorizedKey]})

Если есть другие значения, кроме 0 и 1, вы можете добавить их на карту.Если у вас есть куча больше и вы хотите улучшить читабельность, вы можете сделать это:

{"0": "zero", "1": "one"} as $mapping |
  map(. + {authorizedKey: $mapping[.authorizedKey]})

, что позволяет избежать записи отображения значения в середине кода.

Это работает, потому чтооператор + определен для объектов в jq, и если ключ в RHS уже существует в LHS, его значение заменяется соответствующим значением из RHS.

...