簡體   English   中英

使用具有不同參數的Jackson列表將JSON映射到pojo

[英]Map JSON to pojo using Jackson for List that have different parameters

JSON格式:

[
{
    "0":
    {
        "cast":"",
        "showname":"woh pagle",
        "type":"Episodes"
    },
    "video":[
        {
            "src":"video.mp4"
        },
        {
            "DRM":"False"
        }
    ]
}
]

這里的問題是我得到以下異常:

org.codehaus.jackson.map.JsonMappingException:無法從[源:java.io.StringReader@1c9ca1;]中的START_OBJECT令牌反序列化java.util.ArrayList實例。 行:1,列:55617](通過參考鏈:com.apalya.myplex.valueobject.ThirdPartyContentDetailsArray [“ video”])

我的pojo課是:

@JsonIgnoreProperties(ignoreUnknown = true)
@JsonProperty("0")
private ThirdPartySubContentDetails subContent;

@JsonProperty("video")
private List<ThirdPartySubContentVideoInfo> video;

我的子類pojo是:

private String src;

@JsonIgnore
@JsonProperty("DRM")
private String drm;

請幫助我為該視頻列表編寫一個pojo。

您的json是作為數組而不是對象開始的。 更改的重要部分是Objectmapper應如何生成json。 要返回列表,您需要這樣做:

List<FirstJson> jsonList = mapper.readValue(json, new TypeReference<List<FirstJson>>(){});

這是我在本地實施的簡短工作測試:

public static void main(String[] args) {
    String json = "[{\"0\":{\"cast\":\"\",\"showname\":\"wohpagle\",\"type\":\"Episodes\"},\"video\":[{\"src\":\"video.mp4\"},{\"DRM\":\"False\"}]}]";
    ObjectMapper mapper = new ObjectMapper();

    List<FirstJson> jsonList = mapper.readValue(json, new TypeReference<List<FirstJson>>(){});
    System.out.println(jsonList.toString());
}

Pojo中JsonArray的第一部分。(命名為FirstJson)

public class FirstJson{

        @JsonProperty("0")
        private FirstJson subContent;

        private String cast;
        private String showname;
        private String type;

        @JsonProperty("video")
        private List<Video> videos;

      //getter/setter

和視頻Pojo:

public class Video {

        private String src;

        @JsonProperty("DRM")
        private String drm;

      //getter/setter

只是一個旁注:如果在同一類文件中聲明pojos,則這些類應該是靜態的。 public static class FirstJson

根據問題中描述的JSON結構,以下應該是POJO:

public class MainPojo
{
     @JsonProperty("0")
     private ThirdPartySubContentDetails subContent;

     @JsonProperty("video")
     private List<ThirdPartySubContentVideoInfo> video;

     // Getters and Setters for subContent and video
}

class ThirdPartySubContentDetails
{
    private String cast;
    private String showName;
    private String type;

    // Getters and Setters for cast, showName and type
}

@JsonIgnoreProperties(ignoreUnknown = true)
class ThirdPartySubContentVideoInfo
{
    @JsonProperty("src")
    private String src;

    @JsonProperty("DRM")
    private String drm;

    // Getters and Setters for src and drm
}

您應該按以下方式調用解串器方法:

 List<MainPojo> list = new ObjectMapper().readValue(json, new TypeReference<List<MainPojo>>(){});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM