2016-08-10 36 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

很花哨!工作很好。 –

相關問題