如何在Jolt Spec中移除字符串中的单引号
问题需求
处理一段包含单引号(')的长字符串,需要通过Jolt规则移除其中的单引号,得到指定格式的输出。
输入数据
{ "text": "2023-05-24 12:11:06.185 google.com i-axcel: phone 'New Launch of software city' on USKANSAS changed from USNYC" }
现有Jolt规则
[ { "operation": "shift", "spec": { "text": ["description_cpy2"] } }, { "operation": "modify-overwrite-beta", "spec": { "description_cpy2": "=split('phone',@(1,description_cpy2))", "pharse": "=split('changed',@(1,description_cpy2[1]))", "pharseone": "@(1,pharse[0])", "pharsetwo": "@(1,pharse[0])" } }, { "operation": "modify-overwrite-beta", "spec": { "pharseone": "=trim", "pharsetwo": "=trim" } }, { "operation": "shift", "spec": { "pharseone": "pharseone", "pharsetwo": "pharsetwo" } } ]
当前输出
{ "pharseone" : "'New Launch of software city' on USKANSAS", "pharsetwo" : "'New Launch of software city' on USKANSAS" }
期望输出
{ "pharseone" : "New Launch of software city on USKANSAS", "pharsetwo" : "New Launch of software city on USKANSAS" }
解决方案
在现有Jolt规则的modify-overwrite-beta阶段,添加字符串替换操作,用=replace函数移除单引号即可。这里提供两种修改方式:
方式一:在修剪空格后添加替换步骤
修改后的完整Jolt规则:
[ { "operation": "shift", "spec": { "text": ["description_cpy2"] } }, { "operation": "modify-overwrite-beta", "spec": { "description_cpy2": "=split('phone',@(1,description_cpy2))", "pharse": "=split('changed',@(1,description_cpy2[1]))", "pharseone": "@(1,pharse[0])", "pharsetwo": "@(1,pharse[0])" } }, { "operation": "modify-overwrite-beta", "spec": { "pharseone": ["=trim", "=replace('', '''', @(1,&))"], "pharsetwo": ["=trim", "=replace('', '''', @(1,&))"] } }, { "operation": "shift", "spec": { "pharseone": "pharseone", "pharsetwo": "pharsetwo" } } ]
方式二:合并修剪与替换步骤,简化规则
[ { "operation": "shift", "spec": { "text": ["description_cpy2"] } }, { "operation": "modify-overwrite-beta", "spec": { "description_cpy2": "=split('phone',@(1,description_cpy2))", "pharse": "=split('changed',@(1,description_cpy2[1]))", "pharseone": ["=trim(@(1,pharse[0]))", "=replace('', '''', @(1,&))"], "pharsetwo": ["=trim(@(1,pharse[0]))", "=replace('', '''', @(1,&))"] } }, { "operation": "shift", "spec": { "pharseone": "pharseone", "pharsetwo": "pharsetwo" } } ]
关键说明
=replace('', '''', @(1,&)) 是核心操作:
- 第一个空字符串是替换后的内容,第二个参数
'''是转义后的单引号(Jolt里用三个单引号表示一个单引号),第三个参数@(1,&)表示当前字段的原始值。 - 数组中的操作会按顺序执行,先修剪空格再移除单引号,最终得到不带单引号的目标字符串。
内容的提问来源于stack exchange,提问作者self lab
相关产品推荐
相关产品推荐

