JOLT转换:重命名含@特殊字符键的规则编写及报错解决
JOLT转换规则解决键名含@的重命名问题
问题场景
需要将JSON中带@的键Company@1重命名为CompanyTest,Age重命名为AgeTest,其余键保留,但原规则因键中@不在开头触发报错。
报错信息
Error running the Transform. JOLT Chainr encountered an exception constructing Transform className:com.bazaarvoice.jolt.Shiftr at index:0. Invalid key:Company@1 can not have an @ other than at the front.
输入JSON
[ { "C": "p", "ID": 1, "Company@1": "Tesla", "Age": 30.2, "Year": 1996, "Time": "22/10/1996" }, { "C": "p", "ID": 2, "Company@1": "Facebook", "Age": 40.5, "Year": 2001, "Time": "22/10/2001" } ]
预期输出
[ { "C" : "p", "ID" : 1, "CompanyTest" : "Tesla", "AgeTest" : 30.2, "Year" : 1996, "Time" : "22/10/1996" }, { "C" : "p", "ID" : 2, "CompanyTest" : "Facebook", "AgeTest" : 40.5, "Year" : 2001, "Time" : "22/10/2001" } ]
解决方案
JOLT的Shiftr操作会将键名中的@识别为特殊语法,因此需要对@进行转义处理。修正后的规则如下:
[ { "operation": "shift", "spec": { "*": { "Company\\@1": "[#2].CompanyTest", "Age": "[#2].AgeTest", "*": "[#2].&" } } } ]
规则说明
- 对
Company@1中的@添加反斜杠转义(Company\\@1),避免JOLT将其解析为特殊符号 [#2]用于保留原数组的索引位置,确保每个对象对应到输出数组的正确位置"*": "[#2].&"保留所有未指定重命名的键,&表示沿用原键名
内容的提问来源于stack exchange,提问作者Sumit Manna
相关产品推荐
相关产品推荐

