首页 > 解决方案 > 如何在 Jolt Transformation 中循环时展平一组对象?

问题描述

我正在尝试使用 Jolt 将传入的消息转换为某些自定义对象的列表。

但是,如果传入数组中有嵌套值,我无法获得所需的输出。

传入消息:

[
  {
    "type": "Hourly",
    "employeeIdDetails": [
      {
        "id": "900",
        "idType": "HR_EMP"
      }
    ]
  },
  {
    "type": "Salaried",
    "employeeIdDetails": [
      {
        "id": "436",
        "idType": "SAL_EMP"
      },
      {
        "id": "111",
        "idType": "SAL_EMP"
      }
    ]
  },
  {
    "type": "Salaried",
    "employeeIdDetails": [
      {
        "id": "437",
        "idType": "SAL_EMP"
      }
    ]
  }
]

颠簸规格

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "type": {
          "Salaried": {
            "@2": {
              "employeeIdDetails": {
                "*": {
                  "idType": {
                    "SAL_EMP": {
                      "@2": {
                        "id": "test[&4].ids",
                        "idType": "test[&4].types"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
]

电流输出:

{
  "test" : [ {
    "ids" : [ "436", "437" ],
    "types" : [ "SAL_EMP", "SAL_EMP" ]
  }, {
    "ids" : "111",
    "types" : "SAL_EMP"
  } ]
}

预期产出

{
  "test" : [ {
    "ids" : "436",
    "types" : "SAL_EMP"
  } ,
{
    "ids" : "111",
    "types" : "SAL_EMP"
  } ,
 {
    "ids" : "437",
    "types" : "SAL_EMP"
  } ]
}

除了拥有所有对象外,顺序对我来说并不重要。

我认为,到目前为止我发现的问题是使用“&”。但是,不知道如何在没有它的情况下将值组合到 1 个对象中。

标签: javajolt

解决方案


也许这种方式适合你?

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "type": {
          "Salaried": {
            "@(2,employeeIdDetails)": {
              "*": {
                "idType": {
                  "SAL_EMP": {
                    "@2": "test[]"
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "test": {
        "*": {
          "id": "test[&1].ids",
          "idType": "test[&1].types"
        }
      }
    }
  }
]

推荐阅读