来自数组的 JOLT 转换

JOLT transformation from an array

我正在进行转换,在我将输入定义为数组之前,它工作正常。 我目前的(工作!)样本是: 输入

{
  "trainerName": "Nahuel",
  "trainingName": "1st Training",
  "trainee1firstName": "Martin",
  "trainee2firstName": "Para"
}

使用此 JOLT 规格:

[
  {
    "operation": "shift",
    "spec": {
      "trainerName": "trainerName",
      "trainingName": "training.[0].trainingName",
      "trainee1*": "training.[0].trainees.[0].&(0,1)",
      "trainee2*": "training.[0].trainees.[1].&(0,1)"
    }
  }
]

输出是:

{
  "trainerName" : "Nahuel",
  "training" : [ {
    "trainingName" : "1st Training",
    "trainees" : [ {
      "firstName" : "Martin"
    }, {
      "firstName" : "Para"
    } ]
  } ]
}

这是完美的,但是:对我来说真正的预期输入是这个:

[
  {
    "rowNumber": 1,
    "trainerName": "Nahuel",
    "trainingName": "1st Training",
    "trainee1firstName": "Martin",
    "trainee2firstName": "Para"
  },
  {
    "rowNumber": 2,
    "trainerName": "Nahuel",
    "trainingName": "2nd Training",
    "trainee1firstName": "Greg",
    "trainee2firstName": "Thomas"
  }
]

我需要这样的输出:

{
    "trainerName": "Nahuel",
    "training": [{
            "trainingName": "1st Training",
            "trainees": [{
                "firstName": "Martin"
            }, {
                "firstName": "Para"
            }]
        },
        {
            "trainingName": "2nd Training",
            "trainees": [{
                "firstName": "Greg"
            }, {
                "firstName": "Thomas"
            }]
        }
    ]
}

我将在每个数组对象中收到 "trainerName",但我只需要使用一个。

你能帮我找出解决办法吗?我浏览了多种解决方案,但找不到适合此示例的解决方案。

非常感谢!最佳!

您的规格几乎是正确的。您需要 [&1] 而不是 [0]

同样对于 trainerName 使用 modify-overwrite-beta 操作 firstElement

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "trainerName": "trainerName",
        "trainingName": "training.[&1].trainingName",
        "trainee1*": "training.[&1].trainees.[0].&(0,1)",
        "trainee2*": "training.[&1].trainees.[1].&(0,1)"
      }
    }
  },
  {
    "operation": "modify-overwrite-beta",
    "spec": {
      "trainerName": "=firstElement(@(1,trainerName))"
    }
  }
]