【问题标题】:how do i create POJO class for json with dynamic keys for retrofit?如何使用动态键为 json 创建 POJO 类以进行改造?
【发布时间】:2017-12-04 06:46:00
【问题描述】:
{
  "batchcomplete": "",
  "warnings": {
    "main": {
      "*": "Unrecognized parameter: rvprop."
    },
    "extracts": {
      "*": "\"exlimit\" was too large for a whole article extracts request, lowered to 1."
    }
  },
  "query": {
    "normalized": [
      {
        "from": "pune",
        "to": "Pune"
      }
    ],
    "pages": {
      "164634": {
        "pageid": 164634,
        "ns": 0,
        "title": "Pune",
        "extract": ""
                }
            }
      }
}

在上面的 json 中,“pages”对象内的数字键是动态的。那么我如何为这个 json 做一个 pojo。

请,请,请帮助我。 我已经为此进行了很多搜索,但没有任何效果。 我也是改装的初学者,所以请详细回答。 我已经看到一些答案提到在这种情况下使用地图(例如Parse Dynamic Key Json String using Retrofit)。但是这些答案没有得到适当的阐述。请帮我彻底理解。

【问题讨论】:

  • 不要只是直接。你必须自己尝试,如果你不能解决问题,然后用演示询问。看看这个可能对你有帮助stackoverflow.com/questions/3527264/how-to-create-a-pojo
  • seon,我知道如何制作该链接中解释的 pojo 类。但问题在于 json 具有动态键。如果你知道,请帮助我。
  • @SahilPatil 您是否尝试过使用 hashmap 解决方案?

标签: java android json gson retrofit2


【解决方案1】:

您可以将 A hashmap 用于您的 Pages 类中的其他属性/动态属性

private Map<String, Object> additionalProperties = new HashMap<String, Object>();

@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}

@JsonAnySetter
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}

【讨论】:

    【解决方案2】:
    public class Query {
        private List<Address> normalized ;
        private Map<String, Pages> pages;
        //getter & Setter
        public Map<String, Pages>  getPages() {
            return pages;
        }
        public void setPages(Map<String, Pages>  pages) {
            this.pages = pages;
        }
    
        public class Pages {
            private String pageid;
            private int ns;
            private String title;
            private String extract;
            //define all getter and setter methods
        }
    
        public class Address{
        private String from;
        private String to;
        }
    }
    

    //使用setter方法在Pages类中添加数据。页面 pageObj = new Page(); pageObj.setPageid("164634"); pageObj.setns(0); ... 创建本地 Map Map pagesObj = new HashMap(); pagesObj.put("164634", pageObj); 使用 setPages(pagesObj);设定值

    【讨论】:

      猜你喜欢
      • 2018-12-08
      • 1970-01-01
      • 1970-01-01
      • 2016-08-08
      • 2019-06-09
      • 2011-10-30
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多