Jolt Transform If Else Condition on keys?



我们可以在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"
}

最新更新