2013-05-02 41 views

回答

0

我從谷歌這樣做使用GSON API。寫了一個自定義序列化程序,它檢查類型和值,並基於此創建JSON對象。

1

注:我是EclipseLink JAXB (MOXy)鉛和JAXB (JSR-222)成員專家小組。

下面是如何可以用莫西的JSON結合。

域模型(根)

完成

@XmlElement註釋可用於指定屬性的類型。將類型設置爲Object將強制寫出合格的類型。

import javax.xml.bind.annotation.*; 

public class Root { 

    private String subject; 

    @XmlElement(type=Object.class) 
    public String getSubject() { 
     return subject; 
    } 

    public void setSubject(String subject) { 
     this.subject = subject; 
    } 

} 

演示

由於類型限定符將被整理出的關鍵將需要的值寫入。默認情況下,這將是value。您可以使用JSON_VALUE_WRAPPER屬性將其更改爲$

import java.util.*; 
import javax.xml.bind.*; 
import org.eclipse.persistence.jaxb.JAXBContextProperties; 

public class Demo { 

    public static void main(String[] args) throws Exception { 
     Map<String, Object> properties = new HashMap<String, Object>(3); 
     properties.put(JAXBContextProperties.MEDIA_TYPE, "application/json"); 
     properties.put(JAXBContextProperties.JSON_INCLUDE_ROOT, false); 
     properties.put(JAXBContextProperties.JSON_VALUE_WRAPPER, "$"); 
     JAXBContext jc = JAXBContext.newInstance(new Class[] {Root.class}, properties); 

     Root root = new Root(); 
     root.setSubject("Cabinet model number?"); 

     Marshaller marshaller = jc.createMarshaller(); 
     marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
     marshaller.marshal(root, System.out); 
    } 

} 

輸出

下面是從運行演示代碼的輸出。

{ 
    "subject" : { 
     "type" : "string", 
     "$" : "Cabinet model number?" 
    } 
} 

更多信息

+0

這也是一個很好的解決方案。感謝Blaise! – mittalpraveen 2013-05-10 06:52:48

相關問題