我们可以在Jolt Transform中使用if else条件:
输入:
{
"treasure": [
{
"aname": "FOO",
"bname": "BAR"
}
]
}
输出:
如果name为"FOO"然后改成fname,否则改成name
{
"fname" : "FOO",
"sname" : "BAR"
}
Jolt Spec for If - Else:
[
{
"operation": "shift",
"spec": {
"treasure": {
"*": {
"aname": {
"FOO": {
"@(2,aname)": "aname"
},
"*": {
"@(2,aname)": "gname"
}
},
"bname": {
"BAR": {
"@(2,bname)": "bname"
},
"*": {
"@(2,bname)": "gname"
}
}
}
}
}
}
]
是的,我可以确认这个答案给出了正确的输出,但是
[
{
"operation": "shift",
"spec": {
"treasure": {
"*": {
"aname": "fname",
"bname": "sname"
}
}
}
}
]
当你说你在if/else之后,你的意思是你想要" name"或";bname"输入"名字"?
目前,你的解决方案只是直接映射" name"比;"fname"one_answers";bname"比;"sname".
您可以考虑另一个库Josson。
https://github.com/octomix/josson
反序列化
Josson josson = Josson.fromJsonString(
"{" +
" "treasure": [" +
" {" +
" "aname": "FOO"," +
" "bname": "BAR"" +
" }" +
" ]" +
"}");
转换JsonNode node = josson.getNode(
"treasure" +
".entries()" +
".map(if([key='aname'], if([value='FOO'],'fname',key), 'sname')::value)" +
".mergeObjects()");
System.out.println(node.toPrettyString());
输出{
"fname" : "FOO",
"sname" : "BAR"
}