求助:如何使用Jolt替换JSON中指定Name字段的值?
Jolt字段值替换解决方案
你需要针对Name字段的不同值做精准替换,而非统一覆盖。以下是两种无需重构整个JSON的可行方案:
方案一:链式替换(简洁直接)
使用modify-overwrite-beta操作结合replace函数,依次匹配替换目标值:
[ { "operation": "modify-overwrite-beta", "spec": { "MIRecord": { "*": { "NameValue": { "*": { "Name": "=replace(@(1,Name), 'MBWHLO', 'CHANGE1')", "Name": "=replace(@(1,Name), 'MBITNO', 'CHANGE2')", "Name": "=replace(@(1,Name), 'V_NETA', 'CHANGE3')" } } } } } } ]
该规则会按顺序对每个Name字段执行替换:仅匹配到指定值时才修改,未匹配的Name会保留原内容,其他字段不受影响。
方案二:映射表替换(易于扩展)
如果后续有更多替换需求,用映射表管理更清晰,步骤如下:
- 定义临时映射表存储替换关系;
- 通过
lookup函数匹配取值; - 移除临时映射表,保证输出结构干净。
[ { "operation": "modify-overwrite-beta", "spec": { "nameMap": { "MBWHLO": "CHANGE1", "MBITNO": "CHANGE2", "V_NETA": "CHANGE3" }, "MIRecord": { "*": { "NameValue": { "*": { "Name": "=lookup(@(3,nameMap), @(1,Name), @(1,Name))" } } } } } }, { "operation": "remove", "spec": { "nameMap": "" } } ]
关键说明:
lookup函数参数:@(3,nameMap)指向根节点下的映射表,@(1,Name)是当前要替换的字段值,最后一个@(1,Name)是默认值(未匹配时保留原内容);remove操作仅清理临时创建的nameMap,不会改动原始JSON的其他结构。
原规则问题分析
你之前的规则直接对所有Name字段统一赋值为CHANGE1,未做条件判断,因此会覆盖所有Name值。上述方案均基于原字段值做精准匹配,无需重构整个JSON,完全适配动态输入场景。
内容的提问来源于stack exchange,提问作者Nadjim
相关产品推荐
相关产品推荐

