該處理器使用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
? }
}