Как я могу несколько раз дублировать существующий объект в массиве JSON, используя jq? - PullRequest
1 голос
/ 30 апреля 2020

У меня есть следующий json файл:

{
  "actions": [
    {
      "values": "test",
      "features": [
        {
          "v1": 100,
          "v2": {
            "dates": [
              "2020-04-08 06:58:26",
              "2020-04-08 06:58:26"
            ]
          }
        }
      ]
    }
  ]
}

Я хотел бы добавить n-раз объект в массиве "actions" к его концу, создавая n + 1 всего объектов.

Ожидаемый результат, если n = 2:

{
  "actions": [
    {
      "values": "test",
      "features": [
        {
          "v1": 100,
          "v2": {
            "dates": [
              "2020-04-08 06:58:26",
              "2020-04-08 06:58:26"
            ]
          }
        }
      ]
    },
    {
      "values": "test",
      "features": [
        {
          "v1": 100,
          "v2": {
            "dates": [
              "2020-04-08 06:58:26",
              "2020-04-08 06:58:26"
            ]
          }
        }
      ]
    },
    {
      "values": "test",
      "features": [
        {
          "v1": 100,
          "v2": {
            "dates": [
              "2020-04-08 06:58:26",
              "2020-04-08 06:58:26"
            ]
          }
        }
      ]
    }
  ]
}

Я нашел этот ответ [ Как мне, однако, дублировать существующий объект в массиве JSON, используя jq? он работает только с одним элементом в конце.

1 Ответ

0 голосов
/ 30 апреля 2020

Вы можете просто использовать функцию reduce() вместе с range(), чтобы создать индекс для включения объекта в.

jq --arg n 2 'reduce range(0, ($n|tonumber)) as $d (.; .actions[$d+1] += .actions[0] )' json
...