Java 如何将此JSON响应转换为POJO?

Java 如何将此JSON响应转换为POJO?,java,json,gson,pojo,jsonschema2pojo,Java,Json,Gson,Pojo,Jsonschema2pojo,自动JSON到POJO使用此JSON会严重失败 请注意,不同请求的项目数量不同。 在这里,我将包含带有2项的JSON响应 { "status": 1, "complete": 1, "list": { "734233858": { "item_id": "734233858", "resolved_id": "734233858", "given_url": "https://blog

自动JSON到POJO使用此JSON会严重失败

请注意,不同请求的项目数量不同。 在这里,我将包含带有2项的JSON响应

{
    "status": 1,
    "complete": 1,
    "list": {
        "734233858": {
            "item_id": "734233858",
            "resolved_id": "734233858",
            "given_url": "https://blog.openshift.com/developing-single-page-web-applications-using-java-8-spark-mongodb-and-angularjs/",
            "given_title": "",
            "favorite": "0",
            "status": "0",
            "time_added": "1466459879",
            "time_updated": "1466459862",
            "time_read": "0",
            "time_favorited": "0",
            "sort_id": 1,
            "resolved_title": "Developing Single Page Web Applications using Java 8, Spark, MongoDB, and AngularJS",
            "resolved_url": "https://blog.openshift.com/developing-single-page-web-applications-using-java-8-spark-mongodb-and-angularjs/",
            "excerpt": "In this post you will learn how to use a micro framework called Spark to build a RESTful backend. The RESTful backend is consumed by a single page web application using AngularJS and MongoDB for data storage. I’ll also show you how to run Java 8 on OpenShift.",
            "is_article": "1",
            "is_index": "0",
            "has_video": "0",
            "has_image": "1",
            "word_count": "2727"
        },
        "1015284226": {
            "item_id": "1015284226",
            "resolved_id": "1015284226",
            "given_url": "https://sparktutorials.github.io/2015/08/04/spark-video-tutorials.html",
            "given_title": "",
            "favorite": "0",
            "status": "0",
            "time_added": "1466458750",
            "time_updated": "1466458737",
            "time_read": "0",
            "time_favorited": "0",
            "sort_id": 0,
            "resolved_title": "Spark Video Tutorials",
            "resolved_url": "http://sparktutorials.github.io/2015/08/04/spark-video-tutorials.html",
            "excerpt": "Our friends over at learnhowtoprogram.com have been working on a series of Java courses for beginners, all of which feature Spark. This post contains an overview of these courses with direct links to their videos.",
            "is_article": "1",
            "is_index": "0",
            "has_video": "0",
            "has_image": "0",
            "word_count": "41"
        }
    },
    "error": null,
    "search_meta": {
        "search_type": "normal"
    },
    "since": 1509309762
}

这个JSON对象的POJO是什么样子的?

由于数字是随机的,所以无法很好地解析出
list
对象。你需要把它做成一张地图。否则,其余数据可由Gson解析

class Foo {
    int status;
    int complete;
    TreeMap<String, Object> list;
    Object error;
    SearchMeta search_meta;
    long since;
}

class SearchMeta {
    String search_type;
}

理想情况下,JSON对象中的
list
属性实际上应该是一个元素数组,而不是内部JSON对象。但是,您可以使用以下方法对数据进行建模

import org.codehaus.jackson.annotate.JsonProperty;

import java.util.Map;

class POJO {

    private Integer status;
    private Integer complete;
    private String error;
    private Long since;

    @JsonProperty("search_meta")
    private SearchMeta searchMeta;

    private Map<String, Item> list;

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public Integer getComplete() {
        return complete;
    }

    public void setComplete(Integer complete) {
        this.complete = complete;
    }

    public String getError() {
        return error;
    }

    public void setError(String error) {
        this.error = error;
    }

    public Long getSince() {
        return since;
    }

    public void setSince(Long since) {
        this.since = since;
    }

    public SearchMeta getSearchMeta() {
        return searchMeta;
    }

    public void setSearchMeta(SearchMeta searchMeta) {
        this.searchMeta = searchMeta;
    }

    public Map<String, Item> getList() {
        return list;
    }

    public void setList(Map<String, Item> list) {
        this.list = list;
    }
}

class SearchMeta {

    @JsonProperty("search_type")
    private String searchType;

    public String getSearchType() {
        return searchType;
    }

    public void setSearchType(String searchType) {
        this.searchType = searchType;
    }
}

class Item {

    @JsonProperty("item_id")
    private String itemId;

    @JsonProperty("resolved_id")
    private String resolvedId;

    // more attributes here

    public String getItemId() {
        return itemId;
    }

    public void setItemId(String itemId) {
        this.itemId = itemId;
    }

    public String getResolvedId() {
        return resolvedId;
    }

    public void setResolvedId(String resolvedId) {
        this.resolvedId = resolvedId;
    }
}
import org.codehaus.jackson.annotate.JsonProperty;
导入java.util.Map;
POJO类{
私有整数状态;
私有整数完备;
私有字符串错误;
长期以来私人的;
@JsonProperty(“搜索元数据”)
私有搜索元搜索元;
私人地图列表;
公共整数getStatus(){
返回状态;
}
公共void setStatus(整数状态){
这个状态=状态;
}
公共整数getComplete(){
返回完成;
}
公共void setComplete(整数完成){
这个。完成=完成;
}
公共字符串getError(){
返回误差;
}
公共void setError(字符串错误){
this.error=错误;
}
公共长期服务(){
回归以来;
}
公共无效设置自(很久以前){
this.since=since;
}
公共搜索元getSearchMeta(){
返回搜索元;
}
public void setSearchMeta(SearchMeta SearchMeta){
this.searchMeta=searchMeta;
}
公共映射getList(){
退货清单;
}
公共无效集合列表(映射列表){
this.list=列表;
}
}
类搜索元{
@JsonProperty(“搜索类型”)
私有字符串搜索类型;
公共字符串getSearchType(){
返回搜索类型;
}
public void setSearchType(字符串搜索类型){
this.searchType=searchType;
}
}
类项目{
@JsonProperty(“项目id”)
私有字符串itemId;
@JsonProperty(“已解决的id”)
私有字符串解析没有;
//这里有更多属性
公共字符串getItemId(){
返回itemId;
}
公共void setItemId(字符串itemId){
this.itemId=itemId;
}
公共字符串getResolvedId(){
返回到所做的;
}
public void setResolvedId(字符串resolvedId){
this.resolvedId=resolvedId;
}
}

更多关于解析JSON的信息。

谢谢cricket_007,当我获得15个声誉时,我的投票结果会显示出来
import org.codehaus.jackson.annotate.JsonProperty;

import java.util.Map;

class POJO {

    private Integer status;
    private Integer complete;
    private String error;
    private Long since;

    @JsonProperty("search_meta")
    private SearchMeta searchMeta;

    private Map<String, Item> list;

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public Integer getComplete() {
        return complete;
    }

    public void setComplete(Integer complete) {
        this.complete = complete;
    }

    public String getError() {
        return error;
    }

    public void setError(String error) {
        this.error = error;
    }

    public Long getSince() {
        return since;
    }

    public void setSince(Long since) {
        this.since = since;
    }

    public SearchMeta getSearchMeta() {
        return searchMeta;
    }

    public void setSearchMeta(SearchMeta searchMeta) {
        this.searchMeta = searchMeta;
    }

    public Map<String, Item> getList() {
        return list;
    }

    public void setList(Map<String, Item> list) {
        this.list = list;
    }
}

class SearchMeta {

    @JsonProperty("search_type")
    private String searchType;

    public String getSearchType() {
        return searchType;
    }

    public void setSearchType(String searchType) {
        this.searchType = searchType;
    }
}

class Item {

    @JsonProperty("item_id")
    private String itemId;

    @JsonProperty("resolved_id")
    private String resolvedId;

    // more attributes here

    public String getItemId() {
        return itemId;
    }

    public void setItemId(String itemId) {
        this.itemId = itemId;
    }

    public String getResolvedId() {
        return resolvedId;
    }

    public void setResolvedId(String resolvedId) {
        this.resolvedId = resolvedId;
    }
}