2017-02-16 88 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

相关问题