使用列表中的列表进行 Jolt 变换 Json

Jolt transform Json with list within list

我有一个输出想要颠簸变换,但我很难做到这一点

Json 示例:

{
  "message": [
    [
      "2019",
      "DATE"
    ],
    [
      "second",
      "ORDINAL"
    ],
    [
      "Local",
      "PERSON"
    ],
    [
      "2019",
      "DATE"
    ],
    [
      "ISO",
      "ORG"
    ],
    [
      "Ubuntu",
      "PERSON"
    ]
  ]
}

我想让输出看起来像这样

{
  "DATE": "2019",
  "ORDINAL": "second",
  "PERSON": "Local",
  "DATE": "2019",
  "ORG":"ISO",
  "PERSON": "ubuntu"
}

转换应从下面显示的内容开始,但由于列表以及不断变化的键和值,我感到困惑。原文显示键为大写值,而值为小写值,它们在原文中是倒过来的。

{
    "operation": "shift",
    "spec": {
     ....

当前所需的输出不是有效的 JSON,因为具有重复的 DATEPERSON 键。你想要的可能是

{
  "DATE" : [ "2019", "2019" ],
  "ORDINAL" : "second",
  "PERSON" : [ "Local", "Ubuntu" ],
  "ORG" : "ISO"
}

然后,您可以使用以下规范

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "*": {
          "0": "@(2,[&1][1])"
        }
      }
    }
  }
]

我们通过使用连续的 "*" 通配符遍历 messages 数组的索引,形成这样的 JSON

{
  "0" : [ "2019", "DATE" ],
  "1" : [ "second", "ORDINAL" ],
  "2" : [ "Local", "PERSON" ],
  "3" : [ "2019", "DATE" ],
  "4" : [ "ISO", "ORG" ],
  "5" : [ "Ubuntu", "PERSON" ]
}

然后 "0" 用于获取第二个组件,"@(2,[&1][1])" 用于从该 JSON 值获取每个数组的第一个组件。