如何使用Jolt为列表元素添加长整型格式的当前时间戳
问题需求
需通过Jolt转换器为输入JSON的每个列表元素添加存储长整型当前时间的extracted_at字段,尝试"extracted_at" : ${now()}写法无效,寻求解决办法。
输入JSON
{ "list": [ { "id": "1", "action": "create", "actor": { "type": "user" }, "audit": { "timestamp": 1568677280 } }, { "id": "2", "action": "update", "actor": { "type": "user" }, "audit": { "timestamp": 1568677280 } } ], "response_metadata": { "next_cursor": "hmV4dF9jcXJzb3I6MTU3OTg1NTC1jMWFFDGVmZGQwOTU=" } }
期望输出JSON
{ "list": [ { "extracted_at" : 1668677280, "id": "1", "action": "create", "actor": { "type": "user" }, "audit": { "timestamp": 1568677280 } }, { "extracted_at" : 1668677280, "id": "2", "action": "update", "actor": { "type": "user" }, "audit": { "timestamp": 1568677280 } } ], "response_metadata": { "next_cursor": "hmV4dF9jcXJzb3I6MTU3OTg1NTC1jMWFFDGVmZGQwOTU=" } }
当前Jolt Spec
[ { "operation": "modify-overwrite-beta", "spec": { "list": { "*": { "extractedAt": "${now()}" } } } } ]
NiFi配置

解决步骤
Jolt本身不支持在Spec中直接调用NiFi表达式语言${now()},需借助NiFi属性传递时间戳:
生成时间戳属性
添加UpdateAttribute处理器,新增属性current_timestamp,值设为${now():toNumber()},生成长整型当前时间戳并存储为FlowFile属性。修改Jolt Spec
更新Spec,引用生成的属性,同时修正字段名为extracted_at:[ { "operation": "modify-overwrite-beta", "spec": { "list": { "*": { "extracted_at": "${current_timestamp}" } } } } ]modify-overwrite-beta操作会保留原有字段,若出现字段丢失,可补充shift操作确保全量字段保留。配置JoltTransformJSON
在JoltTransformJSON的Jolt Specification中使用上述修改后的Spec,确保处理器能读取到current_timestamp属性。
完成后,每个列表元素都会被添加上长整型格式的extracted_at字段。
内容的提问来源于stack exchange,提问作者user1578872
相关产品推荐
相关产品推荐

