我正在使用java中的ObjectMapper類對JSON對象進行反序列化。 我正在獲取不同類型的對象(?extends Something),並想知道是否有任何方式以某種通用的方式對它們進行反序列化。 readValue方法獲取輸出對象類型的某些Class類型對象,因此它以某種方式強類型化。通用JSON對象轉換
回答
你試過JSON in Java?
我一直在使用Json-lib庫來實現這個目標,並且對結果非常滿意。 看看庫示例http://json-lib.sourceforge.net/ 您可以註冊自定義morphers,將json的嵌套元素轉換爲適當的類。 我能夠從json到java獲得相當複雜的結構並訪問所有嵌套字段。
希望它可以幫助
這是一個很好的解決方案,我可能會考慮將來使用它 – Roman 2010-08-03 09:17:39
傑克遜可以採取不僅類型擦除類作爲目標類型,而且還TypeReference它採用慣用的「超類型令牌」的格局。來自傑克遜常見問題解答:
List<MyBean> result = mapper.readValue(src, new TypeReference<List<MyBean>>() { });
這適用於各種類型的泛型,而不僅僅是地圖和集合。這在你想到泛型類型的情況下,所以你只有一個班級但是有多個參數變化。
但它聽起來像也許你想要的是實際上支持反序列化多態類型;這也是支持的(從Jackson 1.5開始,請參閱http://wiki.fasterxml.com/JacksonPolymorphicDeserialization)。
編輯:在對方的回答給定的樣本類,傑克遜的辦法是做:
import org.codehaus.jackson.annotate.JsonTypeInfo;
@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS)
public abstract class Message
{
protected Message(){ }
}
和反序列化:
Message msg = objectMapper.readValue(json, Message.class);
得到任何子類消息的。並使用'objectMapper.writeValue();'序列化
這是我來到了一個答案:
首先我轉從ObjectMapper到Gson的。 定義一個抽象類,類型枚舉:
public abstract class Message {
private MessageType type;
protected Message(){
type = setType();
}
protected abstract MessageType setType();
public MessageType getType() {
return type;
}
public void setType(MessageType type) {
this.type = type;
}
}
public enum MessageType {
PRESENCE(PresenceMessage.class),
TEXT(TextMessage.class);
private Class<? extends Message> clazz;
private MessageType(Class<? extends Message> clazz){
this.clazz = clazz;
}
public Class<? extends Message> getClazz() {
return clazz;
}
}
擴展消息每類是我們派出了Json的實際之一。它必須實現getType()方法。
所以desirializing只使用該代碼時:
String line;
BufferedReader reader = new BufferedReader(new InputStreamReader(get.getResponseBodyAsStream(),"UTF-8"));
while ((line = reader.readLine()) != null){
builder.append(line);
}
if (clazz == Message.class){
String string = builder.toString();
Message message = gson.fromJson(string,Message.class);
if (message.getType() == null)
throw new IllegalStateException("Could not de-serialize message " + builder.toString());
return (T)gson.fromJson(string,message.getType().getClazz());
}
,我希望你可以自己填寫缺少的部分。
- 1. 轉換JSON對象
- 2. 轉換的JavaScript JSON對象轉換成Java JSON對象
- 3. 將JSON對象轉換爲C#對象
- 4. 轉換JSON DateTime對象的JavaScript對象
- 5. 轉換XML對象JSON對象
- 6. 轉換JSON對象爲C#對象
- 7. JSON對象轉換成Ruby(Rails)對象
- 8. POJO對象不轉換爲JSON對象
- 9. GSON轉換JSON對象到JAVA對象
- 10. 將jcas對象轉換爲json對象
- 11. 轉換HTML Tag對象,以JSON對象
- 12. 將javascript對象轉換爲json對象
- 13. 轉換JSON到對象
- 14. 轉換JSON數組對象
- 15. 從JSON轉換爲對象
- 16. 轉換數組JSON對象
- 17. 轉換JSON到Grails對象
- 18. Java對象到JSON轉換
- 19. 轉換數組JSON對象
- 20. 轉換JSON到DynaTree對象
- 21. 遞歸轉換json對象
- 22. 轉換對象到JSON
- 23. 轉換result_array()到JSON對象
- 24. 轉換JSON對象在Python
- 25. 將對象轉換爲json?
- 26. 轉換數組JSON對象
- 27. C#對象到JSON轉換
- 28. java轉換爲json對象
- 29. 將對象轉換爲json
- 30. 轉換JSON字符串JSON對象C#
它不是對象綁定,只是DOM類樹。 – StaxMan 2010-08-02 19:31:40