NIFI的处理器:JSLTTransformJSON 2.4.0
该处理器使用JSLT转换FlowFile JSON有效负载的格式。使用转换后的内容创建新的FlowFile,并将其路由到“成功”关系。如果JSLT转换失败,则将原始FlowFile路由到“失败”关系。
需要注意的是,编译JSLT转换可能相当昂贵。理想情况下,这只会做一次。但是,如果在转换中使用表达式语言,我们可能需要为每个FlowFile创建一个新的转换。
JSLT是一种完整的JSON查询和转换语言。语言设计的灵感来自jq、XPath和XQuery。
JSLT可以用作:
一种从JSON(.foo.bar[0])中提取值的查询语言,
一种用于测试JSON对象的过滤/检查语言(以(.foo.bar[0],“http://”开头),
一种用于在JSON格式之间进行转换的转换语言。
https://github.com/schibsted/jslt
https://gitcode.com/gh_mirrors/js/jslt/blob/master/examples/README.md
Input:
{
"menu": {
"popup": {
"menuitem": [
{
"value": "Open",
"onclick": "OpenDoc()"
},
{
"value": "Close",
"onclick": "CloseDoc()"
}
]
}
}
}
The desired output is:
{
"result" : {
"Open" : "OpenDoc()",
"Close" : "CloseDoc()"
}
}
This can be done two different ways, depending on whether one wants to hard-wire the output, or make it dynamic.
Hard-wired:
{
"result" : {
"Open" : .menu.popup.menuitem[0].onclick,
"Close" : .menu.popup.menuitem[1].onclick
}
}
Or, we can turn each value/onclick object into a key/value pair in the output object dynamically, like this:
{
"result" : {for (.menu.popup.menuitem)
.value : .onclick
}
}