在 Jolt 中从不同的输入数组和对象准备列表

问题描述

嗨,我是 JOLT 转换的新手,我正在尝试转换如下内容

这里的主要目标是拥有一个对象列表,而无需在 jolt 中进行常量索引。

不同对象到公共列表的转换。

感谢任何帮助。

此处提供的数据是我所期望的示例。

输入:

{
  "CIT": [
    {
      "name": "name_CIT_1","desc": "desc_CIT_1"
    },{
      "name": "name_CIT_2","desc": "desc_CIT_2"
    },{
      "name": "name_CIT_3","desc": "desc_CIT_3"
    }
  ],"BIT": {
    "name": "name_BIT","desc": "desc_BIT"
  },"NIT": {
    "name": "name_NIT","desc": "desc_NIT"
  },"KIT": {
    "name": "name_KIT","desc": "desc_KIT"
  }
}

震动:

[
  {
    "operation": "modify-default-beta","spec": {
      "*": {}
    }
  },{
    "operation": "modify-overwrite-beta","spec": {}
  },{
    "operation": "shift","spec": {
      "CIT": {
        "*": {
          "name": "CollegeList[0].name","desc": "CollegeList[0].desc"
        }
      },"BIT": {
        "name": "CollegeList[1].name","desc": "CollegeList[1].desc"
      },"NIT": {
        "name": "CollegeList[2].name","desc": "CollegeList[2].desc"
      },"KIT": {
        "name": "CollegeList[3].name","desc": "CollegeList[3].desc"
      }
    }
  }
]

输出

{
  "CollegeList" : [ {
    "name" : [ "name_CIT_1","name_CIT_2","name_CIT_3" ],"desc" : [ "desc_CIT_1","desc_CIT_2","desc_CIT_3" ]
  },{
    "name" : "name_BIT","desc" : "desc_BIT"
  },{
    "name" : "name_NIT","desc" : "desc_NIT"
  },{
    "name" : "name_KIT","desc" : "desc_KIT"
  } ]
}

预期输出

{
  "CollegeList": [
    {
      "name": "name_CIT_1","desc": "desc_CIT_3"
    },{
      "name": "name_BIT","desc": "desc_BIT"
    },{
      "name": "name_NIT","desc": "desc_NIT"
    },{
      "name": "name_KIT","desc": "desc_KIT"
    }
  ]
}

解决方法

您可以使用两个级别的转换转换。实际上,除了默认为root的数组键之外,在第一级中获得了所需的数组。然后只在第二级内重命名数组的键,例如

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

另一种方法:

[
  {
    "operation": "shift","spec": {
      "CIT": {
        "*": "CollegeList[]"
      },"*": "CollegeList[]"
    }
  }
]