JOLT-преобразование для копирования одного значения в массив - PullRequest
0 голосов
/ 18 мая 2018

Я хочу преобразовать JSON в пары ключ-значение и одновременно скопировать определенное единственное значение, то есть «временную метку», во все эти пары.

Входной JSON:

{
  "Timestamp": "2018-05-13T14:57:09",
  "first_key": "1023",
  "another_key": "1987",
  "yet_another_key": "677"
}

Ожидаемый результат:

[ {
    "Timestamp": "2018-05-13T14:57:09.087",
    "key": "first_key",
    "value": "1023"
  },
  {
    "Timestamp": "2018-05-13T14:57:09.087",
    "key": "another_key",
    "value": "1987"
  },
  {
    "Timestamp": "2018-05-13T14:57:09.087",
    "key": "yet_another_key",
    "value": "677"
  }]

До сих пор я придумал следующую спецификацию JOLT.Он уже генерирует пары ключ-значение для всех записей, которые не являются меткой времени, но как я могу скопировать значение метки времени в каждую из этих записей?

[{
  "operation": "shift",
  "spec": {
    "Timestamp": "[].Timestamp",
    "*": {
      "$": "[#2].key",
      "@": "[#2].value"
    }
  }
}]

Вывод вышеуказанной спецификации JOLT:

[ {
  "Timestamp" : "2018-05-13T14:57:09"
}, {
  "key" : "first_key",
  "value" : "1023"
}, {
  "key" : "another_key",
  "value" : "1987"
}, {
  "key" : "yet_another_key",
  "value" : "677"
} ]

1 Ответ

0 голосов
/ 20 мая 2018

Спец

[
  {
    // first separate the Timestamp from the fields that 
    //  are going to be pivoted.
    // This is needed because the "[#2]" logic 
    //  isn't doing what you think it is / 
    //  you would end up with a null in your output array.
    // Basically the "[#2]" logic as written only works
    //  when you are cleanly pivoting data.  Which you are
    //  not because "Timestamp" and "first_key" are siblings.
    "operation": "shift",
    "spec": {
      "Timestamp": "Timestamp",
      "*": "keysToPivot.&"
    }
  },
  {
    "operation": "shift",
    "spec": {
      "keysToPivot": {
        "*": {
          // Now that we can cleanly loop thru _only_ the 
          //  keysToPivot, the [#2] logic will work "right".
          // Additionally, lookup the Timestamp value
          //  and add it to each "pivoted" output.
          "$": "[#2].key",
          "@": "[#2].value",
          "@(2,Timestamp)": "[#2].Timestamp"
        }
      }
    }
  }
]
...