You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JOLT转换需求:相同ID的ORG_LVL_2需归至同一OrgUnits数组

修正JOLT规范实现按ID聚合ORG_LVL_2编码

问题背景

需要将输入JSON通过JOLT转换为指定的输出JSON,核心需求是同一id对应的多个ORG_LVL_2编码需归属到同一个orgUnits数组下,但现有JOLT规范无法实现,会为每个ORG_LVL_2创建独立对象。

输入JSON

[
  {
    "id": "0000606800",
    "ORG_LVL_2": "Co0053"
  },
  {
    "id": "0000606800",
    "ORG_LVL_2": "Co0054"
  },
  {
    "id": "0000609480",
    "ORG_LVL_2": "Co0055"
  }
]

预期输出JSON

{
  "IntegrationEntities": {
    "integrationEntity": [
      {
        "integrationEntityHeader": {
          "referenceCodeForEntity": "test"
        },
        "integrationEntityDetails": {
          "glAccount": {
            "id": "0000606800",
            "orgUnits": {
              "orgUnitAssignment": [
                {
                  "orgUnitDetails": [
                    {
                      "orgUnitLevel": "ORG_LVL_1",
                      "orgUnitCode": "C01"
                    },
                    {
                      "orgUnitLevel": "ORG_LVL_2",
                      "orgUnitCode": "Co0053"
                    }
                  ]
                },
                {
                  "orgUnitDetails": [
                    {
                      "orgUnitLevel": "ORG_LVL_1",
                      "orgUnitCode": "C01"
                    },
                    {
                      "orgUnitLevel": "ORG_LVL_2",
                      "orgUnitCode": "Co0054"
                    }
                  ]
                }
              ]
            }
          }
        }
      },
      {
        "integrationEntityHeader": {
          "referenceCodeForEntity": "test"
        },
        "integrationEntityDetails": {
          "glAccount": {
            "id": "0000609480",
            "orgUnits": {
              "orgUnitAssignment": [
                {
                  "orgUnitDetails": [
                    {
                      "orgUnitLevel": "ORG_LVL_1",
                      "orgUnitCode": "C01"
                    },
                    {
                      "orgUnitLevel": "ORG_LVL_2",
                      "orgUnitCode": "Co0055"
                    }
                  ]
                }
              ]
            }
          }
        }
      }
    ]
  }
}

当前无法满足需求的JOLT规范

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "#test": "IntegrationEntities.integrationEntity.[&1].integrationEntityHeader.referenceCodeForEntity",
        "id": "IntegrationEntities.integrationEntity.[&1].integrationEntityDetails.glAccount.id",
        "#ORG_LVL_1": "IntegrationEntities.integrationEntity.[&1].integrationEntityDetails.glAccount.orgUnits.orgUnitAssignment.orgUnitDetails.[0].orgUnitLevel",
        "#CO1": "IntegrationEntities.integrationEntity.[&1].integrationEntityDetails.glAccount.orgUnits.orgUnitAssignment.orgUnitDetails.[0].orgUnitCode",
        "#ORG_LVL_2": "IntegrationEntities.integrationEntity.[&1].integrationEntityDetails.glAccount.orgUnits.orgUnitAssignment.orgUnitDetails.[1].orgUnitLevel",
        "ORG_LVL_2": "IntegrationEntities.integrationEntity.[&1].integrationEntityDetails.glAccount.orgUnits.orgUnitAssignment.orgUnitDetails.[1].orgUnitCode"
      }
    }
  },
  {
    "operation": "shift",
    "spec": {
      "IntegrationEntities": {
        "integrationEntity": {
          "*": {
            "integrationEntityHeader": {
              "referenceCodeForEntity": "IntegrationEntities.integrationEntity.[&2].integrationEntityHeader.referenceCodeForEntity"
            },
            "integrationEntityDetails": {
              "glAccount": {
                "id": "IntegrationEntities.integrationEntity.[&3].integrationEntityDetails.glAccount.id",
                "orgUnits": "IntegrationEntities.integrationEntity.[&3].integrationEntityDetails.glAccount.orgUnits"
              }
            }
          }
        }
      }
    }
  }
]

修正后的JOLT规范

[
  // 第一步:按id分组,聚合同一id下的ORG_LVL_2到数组
  {
    "operation": "shift",
    "spec": {
      "*": {
        "id": "tempGroupedByID.&1.id",
        "ORG_LVL_2": "tempGroupedByID.&1.orgLvl2List[]"
      }
    }
  },
  // 第二步:转换为目标格式,为每个ORG_LVL_2生成独立的orgUnitAssignment项
  {
    "operation": "shift",
    "spec": {
      "tempGroupedByID": {
        "*": {
          "#test": "IntegrationEntities.integrationEntity.[&1].integrationEntityHeader.referenceCodeForEntity",
          "id": "IntegrationEntities.integrationEntity.[&1].integrationEntityDetails.glAccount.id",
          "orgLvl2List": {
            "*": {
              "@": "IntegrationEntities.integrationEntity.[&3].integrationEntityDetails.glAccount.orgUnits.orgUnitAssignment.[&1].orgUnitDetails[1].orgUnitCode",
              "#ORG_LVL_2": "IntegrationEntities.integrationEntity.[&3].integrationEntityDetails.glAccount.orgUnits.orgUnitAssignment.[&1].orgUnitDetails[1].orgUnitLevel",
              "#ORG_LVL_1": "IntegrationEntities.integrationEntity.[&3].integrationEntityDetails.glAccount.orgUnits.orgUnitAssignment.[&1].orgUnitDetails[0].orgUnitLevel",
              "#C01": "IntegrationEntities.integrationEntity.[&3].integrationEntityDetails.glAccount.orgUnits.orgUnitAssignment.[&1].orgUnitDetails[0].orgUnitCode"
            }
          }
        }
      }
    }
  },
  // 第三步:清理临时分组节点
  {
    "operation": "remove",
    "spec": {
      "tempGroupedByID": ""
    }
  }
]

规范说明

  1. 分组阶段:通过临时节点tempGroupedByID,将同一id对应的所有ORG_LVL_2收集到数组中,完成按id的聚合。
  2. 结构转换阶段:遍历每个id分组,为数组中的每个ORG_LVL_2生成一个独立的orgUnitAssignment对象,每个对象包含固定的ORG_LVL_1信息和当前的ORG_LVL_2信息,确保同一id下的所有ORG_LVL_2归属到同一个orgUnits结构下。
  3. 清理阶段:移除临时创建的分组节点,得到符合预期的最终结构。

内容的提问来源于stack exchange,提问作者Alexa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 18:54:53