2017-02-16 33 views

回答

0

因爲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將沒有屬性。

+0

優秀......非常感謝 – smackenzie

+0

或者,因爲拓藍是腦死亡。我瞭解技術原因:但是沒有合理的軟件包可以設計出這種行爲。我已經看到這是「預期」行爲的解釋。在我們的工作中,我們有這些小小的搜索和替換java片段。 – fool4jesus

相關問題