如何使用Jolt替换某些属性的文本

时间:2019-07-19 22:34:25

标签: java json jolt

我正在使用jolt进行一些转换,虽然已经可以做到,但是在替换JSON文件某些属性中的某些文本时遇到了一些问题。

我试图用/分割值,然后用另外的文字连接我需要的部分,不幸的是,这没用。

输入JSON

{
"components" : {
  "values" : {
    "value1" : {
       "$path" : "1/2/3/bear"
    },
     "value2" : {
       "$path" : "1/2/3/cat"
    },
    "value3" : {
       "$path" : "1/2/3/lion"
    }
  }
}

}

我想在最后的$ path值中添加'#/ myvalue /'。

预期结果

{
"components" : {
  "values" :
    "value1" : {
       "$path" : "#/myvalue/bear"
    },
     "value2" : {
       "$path" : "#/myvalue/cat"
    },
    "value3" : {
       "$path" : "#/myvalue/lion"
    }
 }
}

}

为了获得价值,我尝试了以下一种方法,但效果不如预期。

[
 {
    "operation": "shift",
    "spec": {
        "components": {
            "values": {
                "*": {
                    "\\$path": { //This key has de $ sign
                        "*/*/*/*": {
                            "$(0,4)": "\\$path" //I need to take the four part and assign that to the \\path value
                        }
                    }
                }
            }
        }
    }
}, {
    "operation": "modify-overwrite-beta",
    "spec": {
        "components": {
            "values": {
                "*": {
                    "\\$path": "=concat('#/myvalue/', @(1,\\$path))"
                }
            }
        }
    }
}

]

1 个答案:

答案 0 :(得分:0)

您需要做的就是使用jolt提供的某些功能(例如split,last element,concat等)来操纵原始路径字符串

此规范可以解决问题:

 [{
   "operation": "modify-overwrite-beta",
   "spec": {
     "components": {
       "values": {
         "*": {
           "temp": "=split('/',@(1,\\$path))",
           "last_element": "=lastElement(@(1,temp))",
           "\\$path": "=concat(#/myvalue/,@(1,last_element))"
         }
       }
     }
   }
}, {
   "operation": "shift",
   "spec": {
     "components": {
       "values": {
         "*": {
           "\\$path": "components.values.&1.&"
         }
       }
     }
   }
}]