JOLT добавить значение, если ключ не существует

У меня проблемы с JOLT, я постараюсь быть тупым.

вход

{
  "Root": [{
      "key1": "value1",
      "key2": "value2"
    },
    {
      "key1": "value1"
    }
  ]
}

Как видите, у меня есть массив, 2 объекта внутри. Это мой удар

тряска

[{
  "operation": "shift",
  "spec": {
    "Root": {
      "*": {
        "key1": "newkey1",
        "key2": "newkey2"
      }
    }
  }
}]

и вывод явно такой:

Выход

{
  "newkey1": ["value1", "value1"],
  "newkey2": "value2"
}

Теперь мой вопрос: возможно ли добавить пустое значение в массив "newkey2", когда ключ не существует во входном json? Мне нужно что-то вроде этого:

{
  "newkey1": ["value1", "value1"],
  "newkey2": ["", "value2"]
}
Это может быть что-то легко сделать, но я просто знакомлюсь с JOLT.

2 ответа

"Исправьте" данные, прежде чем у вас есть сдвиг, сделайте это.

[
  {
    "operation": "modify-default-beta",
    "spec": {
      "Root": {
        "*": {
          // Assuming you know the keys
          //  you expect to be in the data,
          //  add default values if they don't
          //  exist.
          "key1": "",
          "key2": ""
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "Root": {
        "*": {
          // Now "shift" to the new format
          // "knowing" that all the keys will
          //  have at least default values.
          // Also, make "newkey1" always be 
          //  an array.
          "key1": "newkey1[]",
          "key2": "newkey2[]"
        }
      }
    }
  }
]

Вы можете использовать ~оператор в спецификации преобразования изменения , чтобы сделать его по умолчанию на основе его существования, например

      [
  {
    "operation": "modify-default-beta",
    "spec": {
      "Root": {
        "*": {
          "~key2": "" // if "key2" does not exist or is null, then default it to be ""
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "Root": {
        "*": {
          "*": "new&" // accumulate values under common keys while prefixing their names with "new" 
        }
      }
    }
  }
]
Другие вопросы по тегам