JOLT数组转换后保留原结构:匹配参数名修改值问题
JOLT转换:匹配数组参数名并修改值(保留未匹配内容)
我正在构建JOLT转换,需要在给定数组中匹配指定参数名时修改其参数值,但当前的转换规则会删除JSON中未匹配的部分,希望保留这些内容。
示例输入
{ "component": { "parameters": [ { "parameter": { "name": "var_name", "value": "val" } }, { "parameter": { "name": "1", "value": "2" } } ] }, "additional": "onemore" }
期望输出
{ "component": { "parameters": [ { "parameter": { "name": "var_name", "value": "new_val" } }, { "parameter": { "name": "1", "value": "2" } } ] }, "additional": "onemore" }
当前使用的JOLT转换规则
[ { "operation": "shift", "spec": { "component": { "parameters": { "*": { "parameter": { "name": { "var_name": { "#new_val": "&6.&5[&4].&3.value" } } } } } } } } ]
当前转换的问题:会删除JSON中未匹配的其余内容,无法保留原结构里的非目标字段。
编辑补充
最初编写示例时遗漏了部分输入内容,感谢@Barbaros Özhan的回答帮助完成了转换。供后续参考,我的原始输入包含额外字段:
{ "component": { "parameters": [ { "option": "true", "parameter": { "name": "var_name", "description": "desc", "value": "val" } }, { "option": "false", "parameter": { "name": "1", "description": "desc", "value": "2" } } ], "other value": "baz" }, "additional": "onemore" }
适配这些字段后,我使用的最终转换规则如下:
[ { "operation": "shift", "spec": { "component": { "parameters": { "*": { "parameter": { "name": { "@": "&5.&4[&3].&2.&1", "var_name": { "#new_val": "&6.&5[&4].&3.value" }, "*": { "@(2,value)": "&6.&5[&4].&3.value" } }, "value": "&6.&5[&4].&3.value", "*": "&4.&3[&2].&1.&" }, "*": "&3.&2[&1].&" } }, "*": "&1.&" }, "*": "&" } } ]
内容的提问来源于stack exchange,提问作者Voxeldoodle
相关产品推荐
相关产品推荐

