如何使用Android上的Jackson将JSON数组解析为不同的对象?

我正在尝试使用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; } 

这样您就会生成子类。

约翰