[英]How do I parse a JSON array into different objects using Jackson on Android?
我正在嘗試在Android上使用Jackson將類似以下的JSON解析為對象(注意:我不受JSON格式的控制-該格式來自Yammer)
"references": [
{
"type": "user",
"id": 12345678,
"name": "Wex"
},
{
"type": "message",
"id": 12345679,
"body":
{
"plain":"A short message"
}
},
{
"type": "thread",
"id": 12345670,
"thread_starter_id": 428181699
}
]
問題在於references
中的每個條目都是具有不同屬性的不同類型的對象。 首先,我得到了:
public static class Reference
{
public String type;
public String id;
}
我寧願避免將所有潛在屬性放在一個對象中,例如:
public static class Reference
{
public static class Body
{
public String plain;
}
public String type;
public String id;
public String name;
public Body body;
public String thread_starter_id;
}
並希望使用根據type
值創建的單獨的類,例如:
public static class ReferenceUser extends Reference
{
public String name;
}
public static class ReferenceMessage extends Reference
{
public static class Body
{
public String plain;
}
public Body body;
}
public static class ReferenceThread extends Reference
{
public String thread_starter_id;
}
那么...讓Jackson像這樣解析JSON的最佳方法是什么?
我目前正在像這樣簡單地解析它:
ObjectMapper mapper = new ObjectMapper();
Reference[] references = mapper.readValue(json, Reference[].class);
您可以使用Jackson進行以下操作:
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "type")
@JsonSubTypes({
@JsonSubTypes.Type(name = "user", value = ReferenceUser.class),
@JsonSubTypes.Type(name = "message", value = ReferenceMessage.class),
@JsonSubTypes.Type(name = "thread", value = ReferenceThread.class)
})
public class Reference {
int id;
String name;
}
這樣,您將生成子類。
約翰
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.