如何在JOLT中为costingSplitLevel字段分配数值常量?
解决JOLT转换中costingSplitLevel字段类型问题
问题背景
需求为字段costingSplitLevel分配数值类型常量1,期望输出"costingSplitLevel":1。但使用JOLT配置"#1":"integration-inbound:IntegrationDetails.integrationEntities.integrationEntity.integrationEntityDetails.poDetails.poHeader.costingSplitLevel"后,该字段值被识别为字符串类型,不符合预期。
解决方案
JOLT中通过#定义的常量默认是字符串类型,要生成数值类型的常量,需添加modify-overwrite-beta操作将字段类型转换为整数。
修改后的完整JOLT配置
[ { "operation": "shift", "spec": { "#UPSERT": "integration-inbound:IntegrationDetails.integrationEntities.integrationEntity.integrationEntityHeader.action", "*": { "*": { "*": { "*": { "PO_ID": "integration-inbound:IntegrationDetails.integrationEntities.integrationEntity.integrationEntityDetails.poDetails.externalId", "#APPROVED": "integration-inbound:IntegrationDetails.integrationEntities.integrationEntity.integrationEntityDetails.poDetails.status", "PO_AMT_TTL": "integration-inbound:IntegrationDetails.integrationEntities.integrationEntity.integrationEntityDetails.poDetails.poHeader.grossTotalAmount", "FREIGHT_TERMS": "integration-inbound:IntegrationDetails.integrationEntities.integrationEntity.integrationEntityDetails.poDetails.poHeader.deliveryTermCode", "WG_REQUESTOR_EMAIL": "integration-inbound:IntegrationDetails.integrationEntities.integrationEntity.integrationEntityDetails.poDetails.items.item.requesterDetails.userEmailId", "WG_DELIVER_TO": "integration-inbound:IntegrationDetails.integrationEntities.integrationEntity.integrationEntityDetails.poDetails.items.item.deliverToUser.userEmailId", "#OFIC": "integration-inbound:IntegrationDetails.integrationEntities.integrationEntity.integrationEntityDetails.poDetails.poHeader.company.companyCode", "BUSINESS_UNIT": "integration-inbound:IntegrationDetails.integrationEntities.integrationEntity.integrationEntityDetails.poDetails.poHeader.businessUnit.buCode", "PYMNT_TERMS_CD": "integration-inbound:IntegrationDetails.integrationEntities.integrationEntity.integrationEntityDetails.poDetails.poHeader.paymentTermId", "#1": "integration-inbound:IntegrationDetails.integrationEntities.integrationEntity.integrationEntityDetails.poDetails.poHeader.costingSplitLevel", "*": { "WG_REQ_ID": "integration-inbound:IntegrationDetails.integrationEntities.integrationEntity.integrationEntityDetails.poDetails.poHeader.poDescription", "#STANDARD": "integration-inbound:IntegrationDetails.integrationEntities.integrationEntity.integrationEntityDetails.poDetails.poHeader.poType", "*": { "@WG_SHIP_ADDR_TYPE": "integration-inbound:IntegrationDetails.integrationEntities.integrationEntity.integrationEntityDetails.poDetails.poHeader.shipToAddressType", "WG_SHIP_ADDR_TYPE": { "2": { "@(2,DESCR_SHIPTO)": "integration-inbound:IntegrationDetails.integrationEntities.integrationEntity.integrationEntityDetails.poDetails.poHeader.shipToAddress.addressName", "@(2,ADDRESS1_SHIPTO)": "integration-inbound:IntegrationDetails.integrationEntities.integrationEntity.integrationEntityDetails.poDetails.poHeader.shipToAddress.addressLine1", "@(2,ADDRESS2_SHIPTO)": "integration-inbound:IntegrationDetails.integrationEntities.integrationEntity.integrationEntityDetails.poDetails.poHeader.shipToAddress.addressLine2", "@(2,ADDRESS3_SHIPTO)": "integration-inbound:IntegrationDetails.integrationEntities.integrationEntity.integrationEntityDetails.poDetails.poHeader.shipToAddress.addressLine3", "@(2,ADDRESS4_SHIPTO)": "integration-inbound:IntegrationDetails.integrationEntities.integrationEntity.integrationEntityDetails.poDetails.poHeader.shipToAddress.addressLine4", "@(2,CITY_SHIPTO)": "integration-inbound:IntegrationDetails.integrationEntities.integrationEntity.integrationEntityDetails.poDetails.poHeader.shipToAddress.city", "@(2,POSTAL_SHIPTO)": "integration-inbound:IntegrationDetails.integrationEntities.integrationEntity.integrationEntityDetails.poDetails.poHeader.shipToAddress.zip", "@(2,STATE_SHIPTO)": "integration-inbound:IntegrationDetails.integrationEntities.integrationEntity.integrationEntityDetails.poDetails.poHeader.shipToAddress.state", "@(2,COUNTRY_SHIPTO)": "integration-inbound:IntegrationDetails.integrationEntities.integrationEntity.integrationEntityDetails.poDetails.poHeader.shipToAddress.country" } }, "WG_CUST_ADDR_CODE": "integration-inbound:IntegrationDetails.integrationEntities.integrationEntity.integrationEntityDetails.poDetails.poHeader.shipToAddress.addressCode", "FREIGHT_TERMS": "integration-inbound:IntegrationDetails.integrationEntities.integrationEntity.integrationEntityDetails.poDetails.poHeader.deliveryTermCode", "SHIPTO_ID": "integration-inbound:IntegrationDetails.integrationEntities.integrationEntity.integrationEntityDetails.poDetails.poHeader.locationCode.location.locationCode", "DUE_DT": "integration-inbound:IntegrationDetails.integrationEntities.integrationEntity.integrationEntityDetails.poDetails.poHeader.deliverOn" } } } } } } } }, { "operation": "shift", "spec": { "*": { "*": { "*": { "integrationEntityHeader": "&3.&2.&1.&", "integrationEntityDetails": { "*": { "externalId": "&5.&4.&3.&2.&1.&", "status": "&5.&4.&3.&2.&1.&", "poHeader": { "poDescription": "&6.&5.&4.&3.&2.&1.&", "poType": "&6.&5.&4.&3.&2.&1.&", "grossTotalAmount": "&6.&5.&4.&3.&2.&1.&", "deliveryTermCode": "&6.&5.&4.&3.&2.&1.&", "shipToAddressType": "&6.&5.&4.&3.&2.&1.&", "shipToAddress": "&6.&5.&4.&3.&2.&1.&", "company": "&6.&5.&4.&3.&2.&1.&", "businessUnit": "&6.&5.&4.&3.&2.&1.&", "locationCode": "&6.&5.&4.&3.&2.&1.&", "deliverOn": "&6.&5.&4.&3.&2.&1.&", "paymentTermId": "&6.&5.&4.&3.&2.&1.&", "costingSplitLevel": "&6.&5.&4.&3.&2.&1.&" }, "items": "&5.&4.&3.&2.&1.&" } } } } } } }, { "operation": "cardinality", "spec": { "*": { "*": { "*": { "*": { "*": { "status": "ONE", "poHeader": { "*": "ONE", "company": { "*": "ONE" } } } } } } } } }, { "operation": "modify-overwrite-beta", "spec": { "*": { "*": { "*": { "*": { "*": { "poHeader": { "costingSplitLevel": "=toInteger(@(1,&))" } } } } } } } } ]
关键说明
- 添加的
modify-overwrite-beta操作通过=toInteger(@(1,&))函数,将costingSplitLevel字段的字符串值转换为整数类型。 - 操作顺序需放在
cardinality之后,确保字段在被去重后完成类型转换。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

