JOLT转换中itemTotalAmount字段未成功赋值的技术求助
JOLT计算字段不显示问题解决
我用JOLT工具处理JSON,想要把输入里的PRICE_PO和QTY_PO相乘,结果存入itemTotalAmount字段,但这个字段始终没出现在输出里。
输入JSON
{ "PURCHASE_ORDER_DISPATCH": { "MsgData": { "Transaction": { "PO_POD_HDR_EVW1": { "PO_POD_LN_EVW1": { "PO_POD_SHP_EVW1": { "PRICE_PO": 14.99, "QTY_PO": 1 } } } } } } }
当前使用的JOLT规格
[ { "operation": "shift", "spec": { "PURCHASE_ORDER_DISPATCH": { "MsgData": { "Transaction": { "PO_POD_HDR_EVW1": { "PO_POD_LN_EVW1": { "PO_POD_SHP_EVW1": { "PRICE_PO": "integration-inbound:IntegrationDetails.integrationEntities.integrationEntity.integrationEntityDetails.poDetails.items.item.marketPrice", "QTY_PO": "integration-inbound:IntegrationDetails.integrationEntities.integrationEntity.integrationEntityDetails.poDetails.items.item.itemQuantity", "e($.PRICE_PO * $.QTY_PO)": "integration-inbound:IntegrationDetails.integrationEntities.integrationEntity.integrationEntityDetails.poDetails.items.item.itemTotalAmount" } } } } } } } } ]
期望输出
{ "integration-inbound:IntegrationDetails": { "integrationEntities": { "integrationEntity": { "integrationEntityDetails": { "poDetails": { "items": { "item": { "marketPrice": 14.99, "itemQuantity": 1, "itemTotalAmount":14.99 } } } } } } } }
问题原因及修正方案
shift操作仅负责字段映射,不支持数值计算逻辑。要实现乘法计算,需拆分步骤:先用modify-overwrite-beta操作完成数值运算,再通过shift映射到目标结构。
修正后的JOLT规格:
[ // 第一步:提取需要计算的字段到根节点 { "operation": "shift", "spec": { "PURCHASE_ORDER_DISPATCH": { "MsgData": { "Transaction": { "PO_POD_HDR_EVW1": { "PO_POD_LN_EVW1": { "PO_POD_SHP_EVW1": { "PRICE_PO": "PRICE_PO", "QTY_PO": "QTY_PO" } } } } } } } }, // 第二步:执行乘法计算生成目标字段 { "operation": "modify-overwrite-beta", "spec": { "itemTotalAmount": "=multiply(@(1,PRICE_PO),@(1,QTY_PO))" } }, // 第三步:将所有字段映射到期望的输出结构 { "operation": "shift", "spec": { "PRICE_PO": "integration-inbound:IntegrationDetails.integrationEntities.integrationEntity.integrationEntityDetails.poDetails.items.item.marketPrice", "QTY_PO": "integration-inbound:IntegrationDetails.integrationEntities.integrationEntity.integrationEntityDetails.poDetails.items.item.itemQuantity", "itemTotalAmount": "integration-inbound:IntegrationDetails.integrationEntities.integrationEntity.integrationEntityDetails.poDetails.items.item.itemTotalAmount" } } ]
步骤说明
- 第一个shift操作:把需要参与计算的字段提取到根节点,简化后续计算的路径引用;
- modify-overwrite-beta操作:调用
=multiply()函数完成两个数值的相乘,生成itemTotalAmount字段; - 最后一个shift操作:将所有字段(包括计算后的字段)映射到最终的输出结构中。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

