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

JOLT转换:将嵌套数组指定字段重命名为timestamp且保留其他内容

JOLT转换规则调整:重命名数组元素字段

初始输入JSON

{"trackingNumber": "1ZEA83550362028861","localActivityDate": "20210324","localActivityTime": "183500","scheduledDeliveryDate": "20210324","actualDeliveryDate": "20210324","actualdeliveryTime": "183500","gmtActivityDate": "20210324","gmtActivityTime": "223500","activityStatus": {"type": "G","code": "OR","description": "Origin Scan"},"activityLocation": {"city": "RANDALLSTOWN,","stateProvince": "MD","postalCode": "21133","country": "US"}}

当前使用的JOLT转换规则

[{"operation": "modify-overwrite-beta","spec": {"tsY": "=substring(@(1,localActivityDate),0,4)","tsM": "=substring(@(1,localActivityDate),4,6)","tsD": "=substring(@(1,localActivityDate),6,8)","tsH": "=substring(@(1,localActivityTime),0,2)","tsMi": "=substring(@(1,localActivityTime),2,4)","tsS": "=substring(@(1,localActivityTime),4,6)","timeStamp": "=concat(@(1,tsY),'-',@(1,tsM),'-',@(1,tsD),'T',@(1,tsH),':',@(1,tsMi),':',@(1,tsS),'Z')","aTY": "=substring(@(1,scheduledDeliveryDate),0,4)","aTM": "=substring(@(1,scheduledDeliveryDate),4,6)","aTD": "=substring(@(1,scheduledDeliveryDate),6,8)","appointmentTime": "=concat(@(1,aTY),'-',@(1,aTM),'-',@(1,aTD))","dTY": "=substring(@(1,actualDeliveryDate),0,4)","dTM": "=substring(@(1,actualDeliveryDate),4,6)","dTD": "=substring(@(1,actualDeliveryDate),6,8)","dTH": "=substring(@(1,actualdeliveryTime),0,2)","dTMi": "=substring(@(1,actualdeliveryTime),2,4)","dTS": "=substring(@(1,actualdeliveryTime),4,6)","deliveryTime": "=concat(@(1,dTY),'-',@(1,dTM),'-',@(1,dTD),'T',@(1,dTH),':',@(1,dTMi),':',@(1,dTS),'Z')}},{"operation": "shift","spec": {"*Number": "transformedPayload.&(0,1)Info","activityStatus": {"*": "transformedPayload.events.&"},"activityLocation": {"*": "transformedPayload.address.&"},"timeStamp": "transformedPayload.events[0].&","appointmentTime": "transformedPayload.events[1].&","deliveryTime": "transformedPayload.events[2].&","activityStatus": {"type": "transformedPayload.events[0].type","code": "transformedPayload.events[0].statusCode","description": "transformedPayload.events[0].statusDescription"},"activityLocation": {"city": "transformedPayload.address.city","stateProvince": "transformedPayload.address.state","postalCode": "transformedPayload.address.postalCode","country": "transformedPayload.address.country"}}},{"operation": "modify-default-beta","spec": {"metaData": {"domain": "LTL","eventType": "statusUpdate","version": "v1"},"transformedPayload": {"events": {"[1]": {"statusCode": "AB","statusDescription": "Delivery Scheduled"},"[2]": {"statusCode": "D1","statusDescription": "Delivered"}}}}]

当前转换结果

{"transformedPayload": {"events": [{"type": "G","statusCode": "OR","statusDescription": "Origin Scan","timeStamp": "2021-03-24T18:35:00Z"},{"appointmentTime": "2021-03-24","statusCode": "AB","statusDescription": "Delivery Scheduled"},{"deliveryTime": "2021-03-24T18:35:00Z","statusCode": "D1","statusDescription": "Delivered"}],"address": {"city": "RANDALLSTOWN,","state": "MD","postalCode": "21133","country": "US"},"trackingInfo": "1ZEA83550362028861"},"metaData": {"domain": "LTL","eventType": "statusUpdate","version": "v1"}}

需求

将events数组第1、2索引中的appointmentTime和deliveryTime字段重命名为timestamp,得到如下目标结果:

{"transformedPayload": {"events": [{"type": "G","statusCode": "OR","statusDescription": "Origin Scan","timeStamp": "2021-03-24T18:35:00Z"},{"timestamp": "2021-03-24","statusCode": "AB","statusDescription": "Delivery Scheduled"},{"timestamp": "2021-03-24T18:35:00Z","statusCode": "D1","statusDescription": "Delivered"}],"address": {"city": "RANDALLSTOWN,","state": "MD","postalCode": "21133","country": "US"},"trackingInfo": "1ZEA83550362028861"},"metaData": {"domain": "LTL","eventType": "statusUpdate","version": "v1"}}

解决方案

问题出在shift操作中使用&保留原字段名,只需直接指定目标字段名即可完成重命名。调整后的JOLT规则如下:

[{"operation": "modify-overwrite-beta","spec": {"tsY": "=substring(@(1,localActivityDate),0,4)","tsM": "=substring(@(1,localActivityDate),4,6)","tsD": "=substring(@(1,localActivityDate),6,8)","tsH": "=substring(@(1,localActivityTime),0,2)","tsMi": "=substring(@(1,localActivityTime),2,4)","tsS": "=substring(@(1,localActivityTime),4,6)","timeStamp": "=concat(@(1,tsY),'-',@(1,tsM),'-',@(1,tsD),'T',@(1,tsH),':',@(1,tsMi),':',@(1,tsS),'Z')","aTY": "=substring(@(1,scheduledDeliveryDate),0,4)","aTM": "=substring(@(1,scheduledDeliveryDate),4,6)","aTD": "=substring(@(1,scheduledDeliveryDate),6,8)","appointmentTime": "=concat(@(1,aTY),'-',@(1,aTM),'-',@(1,aTD))","dTY": "=substring(@(1,actualDeliveryDate),0,4)","dTM": "=substring(@(1,actualDeliveryDate),4,6)","dTD": "=substring(@(1,actualDeliveryDate),6,8)","dTH": "=substring(@(1,actualdeliveryTime),0,2)","dTMi": "=substring(@(1,actualdeliveryTime),2,4)","dTS": "=substring(@(1,actualdeliveryTime),4,6)","deliveryTime": "=concat(@(1,dTY),'-',@(1,dTM),'-',@(1,dTD),'T',@(1,dTH),':',@(1,dTMi),':',@(1,dTS),'Z')}},{"operation": "shift","spec": {"*Number": "transformedPayload.&(0,1)Info","timeStamp": "transformedPayload.events[0].&","appointmentTime": "transformedPayload.events[1].timestamp","deliveryTime": "transformedPayload.events[2].timestamp","activityStatus": {"type": "transformedPayload.events[0].type","code": "transformedPayload.events[0].statusCode","description": "transformedPayload.events[0].statusDescription"},"activityLocation": {"city": "transformedPayload.address.city","stateProvince": "transformedPayload.address.state","postalCode": "transformedPayload.address.postalCode","country": "transformedPayload.address.country"}}},{"operation": "modify-default-beta","spec": {"metaData": {"domain": "LTL","eventType": "statusUpdate","version": "v1"},"transformedPayload": {"events": {"[1]": {"statusCode": "AB","statusDescription": "Delivery Scheduled"},"[2]": {"statusCode": "D1","statusDescription": "Delivered"}}}}]

关键调整点

在shift操作的spec中,将:

  • "appointmentTime": "transformedPayload.events[1].&" 修改为 "appointmentTime": "transformedPayload.events[1].timestamp"
  • "deliveryTime": "transformedPayload.events[2].&" 修改为 "deliveryTime": "transformedPayload.events[2].timestamp"

同时移除了shift操作中重复的activityStatus和activityLocation映射(原规则中重复定义会导致冗余,保留明确的字段映射即可)。

调整后运行转换,即可得到目标结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 02:05:45