如何编写Jolt转换:保留顶层字段并替换含display_value的字段
解决Jolt转换中替换含display_value字段并保留其余字段的问题
需求说明
保留所有顶层字段,若某顶层字段包含display_value子字段,则用该子字段的值替换原顶层字段,同时丢弃该字段下的其他子字段(如link);无display_value的字段保持原样。
正确Jolt转换规则
[ { "operation": "shift", "spec": { "*": { "@": "&1", "display_value": "&1" } } } ]
规则解释
*匹配所有顶层字段,无需逐个指定字段名"@": "&1":先将当前顶层字段的原始值映射到与原字段名相同的键(&1代表父级节点的键,即顶层字段名)"display_value": "&1":若当前顶层字段下存在display_value子字段,则用该子字段的值覆盖之前映射的内容——这一步会自动将原对象类型的字段替换为字符串值,同时丢弃其他子字段
效果验证
输入示例
{ "promoted_by": "client1", "parent": "parent1", "cmdb_ci": { "display_value": "cmdb_value", "link": "https://blabla" }, "other_plain_field": "demo_text", "normal_obj_field": { "foo": "bar" } }
输出示例
{ "promoted_by": "client1", "parent": "parent1", "cmdb_ci": "cmdb_value", "other_plain_field": "demo_text", "normal_obj_field": { "foo": "bar" } }
原规则问题分析
你之前的规则中,两个独立的*条目会导致冲突:第二个*": "&"会把所有顶层字段的原始值重新映射,覆盖了第一个条目生成的display_value替换结果,因此无法达到预期效果。
内容的提问来源于stack exchange,提问作者asmoth
相关产品推荐
相关产品推荐

