如何在JOLT v.0.1.1中为每个JSON元素添加指定键值对?
JOLT转换添加ParentCaseID的解决方案
需求说明
需要将指定输入JSON通过JOLT v0.1.1转换为包含ParentCaseID字段的数组输出,当前使用的JOLT规则无法生成该字段。
输入JSON
{ "entityType": "job", "id": 908815, "properties": { "AvatureID": 908815, "TemplateName": [ "jicofo package", "jitsi meet fork", "jitsi-videobridge2 package" ], "CaseType": [ "Internal project", "Internal project", "Internal project" ], "ProjectType": [ "Cloud Services", "Development", "Cloud Services" ], "Team": [ "Cloud Operations", "Video", "Cloud Operations" ], "Category": [ "Routine Ops", "Platform enhancement", "Routine Ops" ], "WorkflowStepID": [ "579", "531", "579" ] } }
预期输出
[ { "ParentCaseID": 908815, "TemplateName": "jicofo package", "CaseType": "Internal project", "ProjectType": "Cloud Services", "Team": "Cloud Operations", "Category": "Routine Ops", "WorkflowStepID": "579" }, { "ParentCaseID": 908815, "TemplateName": "jitsi meet fork", "CaseType": "Internal project", "ProjectType": "Development", "Team": "Video", "Category": "Platform enhancement", "WorkflowStepID": "531" }, { "ParentCaseID": 908815, "TemplateName": "jitsi-videobridge2 package", "CaseType": "Internal project", "ProjectType": "Cloud Services", "Team": "Cloud Operations", "Category": "Routine Ops", "WorkflowStepID": "579" } ]
当前JOLT规则及问题
当前规则可生成数组中其他字段,但缺少ParentCaseID:
[ { "operation": "shift", "spec": { "*": { "TemplateName": { "*": { "@": "[&1].TemplateName" } }, "CaseType": { "*": { "@": "[&1].CaseType" } }, "ProjectType": { "*": { "@": "[&1].ProjectType" } }, "Team": { "*": { "@": "[&1].Team" } }, "Category": { "*": { "@": "[&1].Category" } }, "WorkflowStepID": { "*": { "@": "[&1].WorkflowStepID" } } } } } ]
修改后的JOLT规则
在shift操作的spec中,添加对根节点id字段的引用,为数组每个元素复制该值作为ParentCaseID:
[ { "operation": "shift", "spec": { "id": { "@": "[#2].ParentCaseID" }, "properties": { "TemplateName": { "*": { "@": "[&1].TemplateName" } }, "CaseType": { "*": { "@": "[&1].CaseType" } }, "ProjectType": { "*": { "@": "[&1].ProjectType" } }, "Team": { "*": { "@": "[&1].Team" } }, "Category": { "*": { "@": "[&1].Category" } }, "WorkflowStepID": { "*": { "@": "[&1].WorkflowStepID" } } } } } ]
规则说明
id字段处理:通过@引用当前id的值,[#2]表示将值赋值给数组的所有元素(数组长度由其他字段的索引自动匹配),确保每个元素都带有ParentCaseID字段。- 保留原有对
properties下各数组字段的处理逻辑,保证其他字段正常映射。
修改后,转换结果将完全匹配预期输出。
内容的提问来源于stack exchange,提问作者Mariano Baudena
相关产品推荐
相关产品推荐

