我在OracleXE的HR Sample數據庫中已將國家/地區加入到位置。爲什麼tWriteJSONField爲空值創建一個數組?
然後我使用tMap生成嵌套的JSON文檔。
它的工作原理,但在位置某種原因空值來作爲通過在陣列控制檯中的最終輸出(也嘗試過的MongoDB)。
我在OracleXE的HR Sample數據庫中已將國家/地區加入到位置。爲什麼tWriteJSONField爲空值創建一個數組?
然後我使用tMap生成嵌套的JSON文檔。
它的工作原理,但在位置某種原因空值來作爲通過在陣列控制檯中的最終輸出(也嘗試過的MongoDB)。
因爲tWriteJSONField生成XML,那麼它使用JSON-lib的變換爲JSON。你的空值將被轉換爲一個空的xml節點<STATE_PROVINCE/>
,並且沒有這個節點的上下文的json-lib將假定它是一個沒有子節點的父節點,而不是一個空文本(在這一點上空的概念已經很遠了)。
這裏是短會發生什麼:
package test.json;
public class JSONTest {
public static void main(String[] args) {
net.sf.json.xml.XMLSerializer s = new net.sf.json.xml.XMLSerializer();
s.clearNamespaces();
s.setSkipNamespaces(true);
s.setForceTopLevelObject(true);
net.sf.json.JSON json = s.read("<?xml version=\"1.0\" encoding=\"ISO-8859-15\"?>" +
"<org>" +
"<STATE_PROVINCE/>" +
"</org>"
);
System.out.println(json.toString());
}
}
結果:
{"org":{"STATE_PROVINCE":[]}}
一個骯髒的解決方案是在你的tWriteJSONField使用屬性,而不是節點,但它會與@前綴的屬性。所以在這個組件之後你把一個tReplace,搜索"\"@"
,用"\""
替換,取消全選單詞,檢查全局表達式。如果爲空,您的最終JSON將沒有屬性。
由於https://www.talendforge.org/forum/viewtopic.php?id=27791
插入tJavaRow用下面的代碼你tWriteJsonField之後:
優秀......非常感謝 – smackenzie
或者,因爲拓藍是腦死亡。我瞭解技術原因:但是沒有合理的軟件包可以設計出這種行爲。我已經看到這是「預期」行爲的解釋。在我們的工作中,我們有這些小小的搜索和替換java片段。 – fool4jesus