如何使用Jolt替换JSON中的字符串子串
如何使用Jolt替换JSON中的字符串子串
嘿,我来帮你搞定用Jolt替换JSON字符串子串的问题!先看看你提供的输入JSON(我把截断的second_path部分补全了,方便后续演示):
{ "value": [ { "identifier": "first_path", "language": "", "product_no": "", "value": "MYPATH\\PATH01", "value_unit_key": "" }, { "identifier": "e_class_number", "language": "", "product_no": "", "value": "40-02-90-01", "value_unit_key": "" }, { "identifier": "erp_lastchange_at", "language": "", "product_no": "", "value": "17.07.2023 13:14:50", "value_unit_key": "" }, { "identifier": "second_path", "language": "", "product_no": "", "value": "MYPATH\\PATH02", "value_unit_key": "" } ] }
假设你想要把路径类字段(比如first_path、second_path)里的MYPATH\\替换成NEWBASE\\,可以用Jolt的modify-overwrite-beta转换器结合replace函数来实现。下面是对应的Jolt规范:
[ { "operation": "modify-overwrite-beta", "spec": { "value": { "*": { // 只针对first_path和second_path做替换,其他字段保留原值 "value": "=replace(@(1,identifier), '(first_path|second_path)', replace(@(1,value), 'MYPATH\\\\', 'NEWBASE\\\\'))" } } } } ]
我来拆解下这个规范的逻辑:
modify-overwrite-beta是Jolt里用于修改字段值的核心操作;value.*表示遍历value数组里的每一项元素;- 嵌套的
replace函数:先判断当前项的identifier是否是目标路径字段,是的话就执行内层替换,把value里的MYPATH\\换成NEWBASE\\;不是目标字段的话,就保持原value不变。
转换后的输出JSON会是这样:
{ "value": [ { "identifier": "first_path", "language": "", "product_no": "", "value": "NEWBASE\\PATH01", "value_unit_key": "" }, { "identifier": "e_class_number", "language": "", "product_no": "", "value": "40-02-90-01", "value_unit_key": "" }, { "identifier": "erp_lastchange_at", "language": "", "product_no": "", "value": "17.07.2023 13:14:50", "value_unit_key": "" }, { "identifier": "second_path", "language": "", "product_no": "", "value": "NEWBASE\\PATH02", "value_unit_key": "" } ] }
如果你的需求是所有value字段都要替换指定子串,不管identifier是什么,那可以简化成下面的Jolt规范:
[ { "operation": "modify-overwrite-beta", "spec": { "value": { "*": { "value": "=replace(@(1,value), 'MYPATH\\\\', 'NEWBASE\\\\')" } } } } ]
⚠️ 注意:在Jolt里处理反斜杠时要写四次\\\\——因为JSON本身需要转义一次,Jolt解析时又需要再转义一次,才能正确识别成单个反斜杠进行替换。
备注:内容来源于stack exchange,提问作者Katja Bürger
相关产品推荐
相关产品推荐

