首页 > 解决方案 > 来自数组的 JOLT 转换

问题描述

我正在进行转换,并且在我将输入定义为数组之前它工作正常。我当前(工作!)示例是:输入

{
  "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”,但我只需要使用一个。

你能帮我找出解决办法吗?我正在浏览几种解决方案,但找不到适合该示例的解决方案。

提前非常感谢!最好的!

标签: jolt

解决方案


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

也适用于 trainerNamefirstElement使用modify-overwrite-beta操作。

[
  {
    "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))"
    }
  }
]

推荐阅读