Android 如何从以下动态JSON生成普通的旧Java对象

Android 如何从以下动态JSON生成普通的旧Java对象,android,json,retrofit2,pojo,Android,Json,Retrofit2,Pojo,我需要在android中使用2从JSON生成POJO,但问题是标签会通过提供不同的查询而不断变化 JSON 1 { "query":{ "pages":{ "4803":{ "pageid":4803, "ns":0, "title":"hello", "extract":"Greating to some one" }}}} JSON 2 { "query":{

我需要在android中使用2JSON生成POJO,但问题是标签会通过提供不同的查询而不断变化

JSON 1

{ "query":{
      "pages":{
         "4803":{
            "pageid":4803,
            "ns":0,
            "title":"hello",
            "extract":"Greating to some one"
  }}}}
JSON 2

{ "query":{
      "pages":{
         "2354":{
            "pageid":2354,
            "ns":0,
            "title":"Nice",
            "extract":"Say Appreciation to someone"
  }}}}
在上面的两个JSONs中,值正在变化,例如48032354类似地,我不知道所有的值,所以如何生成POJO,我尝试了很多,但它以\u 4803\u 2354的名义创建类,但实际上通过向API提供不同的查询,值发生了变化

这是我所有的Java代码 1.

public class Example {
    @SerializedName("query")
    @Expose
    private Query query;

    public Query getQuery() {
        return query;
    }

    public void setQuery(Query query) {
        this.query = query;
    }
}
public class modelClass {
    @SerializedName("pageid")
    @Expose
    private Integer pageid;
    @SerializedName("ns")
    @Expose
    private Integer ns;
    @SerializedName("title")
    @Expose
    private String title;
    @SerializedName("extract")
    @Expose
    private String extract;

    public Integer getPageid() {
        return pageid;
    }

    public void setPageid(Integer pageid) {
        this.pageid = pageid;
    }

    public Integer getNs() {
        return ns;
    }

    public void setNs(Integer ns) {
        this.ns = ns;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getExtract() {
        return extract;
    }

    public void setExtract(String extract) {
        this.extract = extract;
    }
}
public class Pages {
    @SerializedName("pages")
    @Expose
    private Map<String, modelClass> page;

    public Map<String, modelClass> getPage() {
        return page;
    }

    public void setPage(Map<String, modelClass> page) {
        this.page = page;
    }
}
public class Query {

    @SerializedName("pages")
    @Expose
    private Pages pages;

    public Pages getPages() {
        return pages;
    }

    public void setPages(Pages pages) {
        this.pages = pages;
    }
}
2.

public class Example {
    @SerializedName("query")
    @Expose
    private Query query;

    public Query getQuery() {
        return query;
    }

    public void setQuery(Query query) {
        this.query = query;
    }
}
public class modelClass {
    @SerializedName("pageid")
    @Expose
    private Integer pageid;
    @SerializedName("ns")
    @Expose
    private Integer ns;
    @SerializedName("title")
    @Expose
    private String title;
    @SerializedName("extract")
    @Expose
    private String extract;

    public Integer getPageid() {
        return pageid;
    }

    public void setPageid(Integer pageid) {
        this.pageid = pageid;
    }

    public Integer getNs() {
        return ns;
    }

    public void setNs(Integer ns) {
        this.ns = ns;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getExtract() {
        return extract;
    }

    public void setExtract(String extract) {
        this.extract = extract;
    }
}
public class Pages {
    @SerializedName("pages")
    @Expose
    private Map<String, modelClass> page;

    public Map<String, modelClass> getPage() {
        return page;
    }

    public void setPage(Map<String, modelClass> page) {
        this.page = page;
    }
}
public class Query {

    @SerializedName("pages")
    @Expose
    private Pages pages;

    public Pages getPages() {
        return pages;
    }

    public void setPages(Pages pages) {
        this.pages = pages;
    }
}
3.

public class Example {
    @SerializedName("query")
    @Expose
    private Query query;

    public Query getQuery() {
        return query;
    }

    public void setQuery(Query query) {
        this.query = query;
    }
}
public class modelClass {
    @SerializedName("pageid")
    @Expose
    private Integer pageid;
    @SerializedName("ns")
    @Expose
    private Integer ns;
    @SerializedName("title")
    @Expose
    private String title;
    @SerializedName("extract")
    @Expose
    private String extract;

    public Integer getPageid() {
        return pageid;
    }

    public void setPageid(Integer pageid) {
        this.pageid = pageid;
    }

    public Integer getNs() {
        return ns;
    }

    public void setNs(Integer ns) {
        this.ns = ns;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getExtract() {
        return extract;
    }

    public void setExtract(String extract) {
        this.extract = extract;
    }
}
public class Pages {
    @SerializedName("pages")
    @Expose
    private Map<String, modelClass> page;

    public Map<String, modelClass> getPage() {
        return page;
    }

    public void setPage(Map<String, modelClass> page) {
        this.page = page;
    }
}
public class Query {

    @SerializedName("pages")
    @Expose
    private Pages pages;

    public Pages getPages() {
        return pages;
    }

    public void setPages(Pages pages) {
        this.pages = pages;
    }
}
6。从mainActivity调用但返回nullpointerException,因此如何提取值响应

ApiService apiService = RetroClient.getApiService();
        Call<Example> call = apiService.getWordList(//here i passed value, that return json//);

        call.enqueue(new Callback<Example>() {
            @Override
            public void onResponse(Call<Example> call, Response<Example> response) {
                if (response.body() != null) {
                 // how get json value here
                }
            }

            @Override
            public void onFailure(Call<Example> call, Throwable t) {
            }
        });
ApiService ApiService=RetroClient.getApiService();
Call Call=apiService.getWordList(//这里我传递了值,返回json//);
call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
if(response.body()!=null){
//如何在这里获取json值
}
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
}
});

请告诉我如何解决这样的问题。谢谢。

在使用动态键的情况下,您可以使用Map。比如说

 @SerializedName("pages")
@Expose
private Map<String, yourmodelclassforinsidedynamickeyvalue> page;

之后,从映射值可以得到模型类。若你们需要钥匙,你们可以从地图钥匙那个里得到。

你们可以在动态钥匙的情况下使用地图。比如说

 @SerializedName("pages")
@Expose
private Map<String, yourmodelclassforinsidedynamickeyvalue> page;

之后,从映射值可以得到模型类。如果您需要密钥,您可以从map key获取该密钥。

在使用动态标记时,您需要使用hashMap

然后在你的回答中使用这个

  if (response.body() != null) {
     Example numberResponse = response.body();
     String keys = numberResponse.getQuery().getPages().toString(); 
     Map<String, Pages> entityList = 
     response.body().getQuery().getPages();
         for (String mapKey : entityList.keySet()) {
         String text = entityList.get(mapKey).getExtract();
            // use text where you want :)
   }}
if(response.body()!=null){
示例numberResponse=response.body();
字符串键=numberResponse.getQuery().getPages().toString();
映射实体列表=
response.body().getQuery().getPages();
for(字符串映射键:entityList.keySet()){
String text=entityList.get(mapKey.getExtract();
//在需要的位置使用文本:)
}}

在使用动态标记时,您需要使用hashMap

然后在你的回答中使用这个

  if (response.body() != null) {
     Example numberResponse = response.body();
     String keys = numberResponse.getQuery().getPages().toString(); 
     Map<String, Pages> entityList = 
     response.body().getQuery().getPages();
         for (String mapKey : entityList.keySet()) {
         String text = entityList.get(mapKey).getExtract();
            // use text where you want :)
   }}
if(response.body()!=null){
示例numberResponse=response.body();
字符串键=numberResponse.getQuery().getPages().toString();
映射实体列表=
response.body().getQuery().getPages();
for(字符串映射键:entityList.keySet()){
String text=entityList.get(mapKey.getExtract();
//在需要的位置使用文本:)
}}

错误已解决,但调用其返回空值的问题已解决,请检查我的更新问题@AMITROR;但调用其返回空值的问题已解决,请检查我的更新问题@Amit