【问题标题】:How to turn this JSON response into POJO?如何将此 JSON 响应转换为 POJO?
【发布时间】:2018-04-21 16:26:11
【问题描述】:

使用此 JSON 自动将 JSON 转换为 POJO 失败。

请注意,项目的数量因一个请求而异。 在这里,我包含 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 会是什么样子?

【问题讨论】:

    标签: java json gson pojo jsonschema2pojo


    【解决方案1】:

    您无法合理地解析出 list 对象,因为这些数字是随机的。你需要把它做成一张地图。否则,其余数据可由 Gson 解析。

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

    您可以将&lt;String, Object&gt; 映射替换为&lt;String, InnerObject&gt;,其中InnerObject 是该对象的POJO

    {
        "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",
        ...
    

    【讨论】:

    • 感谢 cricket_007,当我获得 15 个声望时,我的投票将显示出来
    【解决方案2】:

    理想情况下,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;
        }
    }
    

    Here 是关于解析 JSON 的更多信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多