在下面的格式中,我懷疑是每個字段提到的類型。你能提出一些解決方案嗎?這是第三方將要消費的一項要求。如何使用XStream或其他解析器以下面的格式獲取json?
主題 「:{ 」類型「:」 串」, 「$」: 「內閣型號」 }
在下面的格式中,我懷疑是每個字段提到的類型。你能提出一些解決方案嗎?這是第三方將要消費的一項要求。如何使用XStream或其他解析器以下面的格式獲取json?
主題 「:{ 」類型「:」 串」, 「$」: 「內閣型號」 }
我從谷歌這樣做使用GSON API。寫了一個自定義序列化程序,它檢查類型和值,並基於此創建JSON對象。
注:我是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?"
}
}
更多信息
這也是一個很好的解決方案。感謝Blaise! – mittalpraveen 2013-05-10 06:52:48
使用Jackson 2,請參閱http://stackoverflow.com/q/6542833/100836 – Zaki 2013-05-02 06:05:53