Использование JOLT для разделения массива на основе attirbute - PullRequest
0 голосов
/ 20 октября 2019

Я пытаюсь использовать JOLT, чтобы разделить массив на несколько массивов на основе атрибута. Я пробовал использовать спецификацию JOLT «Shift», но не могу ее достичь.

Я просмотрел несколько ссылок, где выполняется преобразование массива, но я не могу найти способ разделить массив на несколько массивов.

Пример: преобразовать следующий массив в 3 массива на основе значения атрибута "тип".

Ввод:

[
  {
    "name": "abc1",
    "address": "abcdef",
    "types": [
      "a",
      "b"
    ]
  },
  {
    "name": "abc2",
    "address": "abcdef2",
    "types": [
      "b",
      "c"
    ]
  },
  {
    "name": "abc3",
    "address": "abcdef3",
    "types": [
      "c"
    ]
  }
]

Вывод:

{
  "a": [
    {
      "name": "abc1",
      "address": "abcdef",
      "types": [
        "a",
        "b"
      ]
    }
  ],
  "b": [
    {
      "name": "abc1",
      "address": "abcdef",
      "types": [
        "a",
        "b"
      ]
    },
    {
      "name": "abc2",
      "address": "abcde2",
      "types": [
        "b",
        "c"
      ]
    }
  ],
  "c": [
    {
      "name": "abc2",
      "address": "abcde2",
      "types": [
        "b",
        "c"
      ]
    },
    {
      "name": "abc3",
      "address": "abcdef3",
      "types": [
        "c"
      ]
    }
  ]
}

1 Ответ

1 голос
/ 21 октября 2019

Это даст желаемый результат:

  1. для каждого элемента в типах
  2. Использовать значение массива (&1) в качестве ключа
  3. Перейти на 3уровни и скопировать его как значение (@3)
[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "types": {
          "*": {
            "*": {
              "@3": "&1"
            }
          }
        }
      }
    }
  }
]
...