2016-08-10 33 views
1

这里的JSON阵列是JSON片段,其包含一个数组(图标),其可包含两种不同类型的对象(应用程序和文件夹)如何反序列化含有不同类型的对象

{ 
     "icons": [{ 
      "application": { 
       "displayName": "Facebook", 
       "bundleId": "com.facebook.com" 
      } 
     }, { 
      "folder": { 
       "some": "value", 
       "num": 3 
      } 
     }] 
    } 

如何创建java POJO的建模这种json然后反序列化一样吗?我提到question。但是我不能改变json,因为我在这里建议使用'type',然后为两个不同对象的POJO使用继承。

+1

只需创建一个自定义解串器,根据'key'切换。 –

+0

@BoristheSpider不需要自定义的反序列化器:) –

回答

3

不需要自定义的反序列化器。一个智能@JsonTypeInfo将做的伎俩。

请参见下面的类和接口可以是什么样子:

@JsonTypeInfo(use = Id.NAME, include = As.WRAPPER_OBJECT) 
@JsonSubTypes({ @Type(value = ApplicationIcon.class, name = "application"), 
       @Type(value = FolderIcon.class, name = "folder") }) 
public interface Icon { 

} 
@JsonRootName("application") 
public class ApplicationIcon implements Icon { 

    public String displayName; 
    public String bundleId; 

    // Getters and setters ommited 
} 
@JsonRootName("folder") 
public class FolderIcon implements Icon { 

    public String some; 
    public Integer num; 

    // Getters and setters ommited 
} 
public class IconWrapper { 

    private List<Icon> icons; 

    // Getters and setters ommited 
} 

要反序列化JSON,请执行下列操作:

String json = "{\"icons\":[{\"application\":{\"displayName\":\"Facebook\",\"bundleId\":\"com.facebook.com\"}},{\"folder\":{\"some\":\"value\",\"num\":3}}]}"; 

ObjectMapper mapper = new ObjectMapper(); 
IconWrapper iconWrapper = mapper.readValue(json, IconWrapper.class); 
+1

很花哨!工作很好。 –

相关问题