JOLT转换:将Timestamp值复制到数组所有键值对中
解决JOLT中复制Timestamp到每个键值对的问题
你已经搭建了基础的转换规则,只是之前的写法把Timestamp单独拆成了一个数组元素,没和其他键值对关联起来。只需要微调一下shift操作的规则,就能让每个键值对都带上这个时间戳啦。
正确的JOLT规则
[ { "operation": "shift", "spec": { "*": { "$": "[].key", "@": "[].value", "@(2,Timestamp)": "[].Timestamp" } } } ]
规则细节解释
- 核心是
@(2,Timestamp):这里的2表示向上回溯两层路径(从当前处理的子键,回到根节点层级),拿到根节点的Timestamp值,再把它塞进当前正在生成的数组元素里。 - 对于每个非
Timestamp的键(比如first_key、another_key),我们会同时生成key(键名)、value(键值)和Timestamp三个字段,最终每个键值对都会变成数组里的一个完整对象。
转换效果验证
输入JSON:
{ "Timestamp": "2018-05-13T14:57:09", "first_key": "1023", "another_key": "1987", "yet_another_key": "677" }
经过上述规则转换后,输出完全匹配你的期望:
[ { "Timestamp": "2018-05-13T14:57:09", "key": "first_key", "value": "1023" }, { "Timestamp": "2018-05-13T14:57:09", "key": "another_key", "value": "1987" }, { "Timestamp": "2018-05-13T14:57:09", "key": "yet_another_key", "value": "677" } ]
如果需要保留时间戳的毫秒部分(比如你示例里的2018-05-13T14:57:09.087),只要确保输入的Timestamp字段包含该内容即可,JOLT规则不需要额外调整。
内容的提问来源于stack exchange,提问作者Klaus R.
相关产品推荐
相关产品推荐

