2016-11-04 68 views
0

我已經嘗試將csv轉換爲json。如何爲json內容使用表達式語言?

像下面我的CSV數據..,

Top  
Jun  Sdas 123 
Jul  gh 456 
Aug-16  Rav 789 
Jan-16  Trai 767 

現在我已經使用以下結構處理器..,

GetFile-->InferredAvroSchema-->ConvertCSVToAvro-->ConvertAvroToJson-->PutFile. 

現在導致下面的JSON的。,

[ 
{"field_0": "Top", "field_1": "", "field_2": null}, 
{"field_0": "Jun", "field_1": "Sdas", "field_2": 123}, 
{"field_0": "Jul", "field_1": "gh", "field_2": 456}, 
{"field_0": "Aug-16", "field_1": "Rav", "field_2": 789}, 
{"field_0": "Jan-16", "field_1": "Trai", "field_2": 767} 
] 

現在我需要爲「field_0」添加表達式語言,以便在值中不存在時添加「-16」。

例如:具有「Jun」的第二行中的「field_0」。現在我需要檢查「-16」是否存在於現場並且如果不存在也添加。

如何將nifi處理器中的表達式語言方法添加到json內容中?

Anyotherway是可能的嗎?

任何幫助表示讚賞和接受?

回答

1

有多種選擇可以提供所需的功能。

僅使用提供的處理器,則可以使用EvaluateJsonPathRouteOnContent以檢測是否所需的鍵和值存在,然後使用ReplaceText或可能JoltTransformJSONupdate the content to include your default value。看起來你的流程文件非常小,所以這不應該是一個問題,但要注意JoltTransformJSON不以流式方式運行,所以對於大流量文件,這會對內存消耗產生負面影響。

如果您對Groovy/Ruby/Jython/Javascript/Lua感到滿意,您也可以在一次操作中使用ExecuteScript執行此操作。通過Groovy的內置JSON處理(快速將JSON塊視爲地圖對象),您可以在單行中執行檢測和默認填充,並可非常輕鬆地將流文件內容寫回。 ExecuteScript是一個非常有用和多用途的工具,它可以作爲推薦它用於每個問題的作弊,但在這種情況下,它確實可能是最簡單的解決方案。

+1

謝謝安迪它的工作 –