android - 使用 Retrofit 将动态 JSON 解析为 POJO

标签 android json gson retrofit

嗨,我有 json,它有一些动态字段名称:

{
"status": {
    "rcode": 200,
    "message": "OK"
},
"data": {
    "0": {
        "SubFranchiseID": "0",
        "OutletID": "607",
        "OutletName": "Spill "
    },
    "1": {
        "SubFranchiseID": "0",
        "OutletID": "32",
        "OutletName": "PizzaRoma"
    }
},
"hash": "b262c62ea3c8c693ad35210289a487d6963434d7"

}

“0”和“1”是动态字符串值。

从这里开始How to parse Dynamic lists with Gson annotations?

我将数据类创建为:

public class Data {

   public Map<String, Restaurant> restaurants = new HashMap<>();;

   public Map<String, Restaurant> getRestaurants() {
      return restaurants;
   }
}

但是当我在 Retrofit 中使用 getRestaurants().size() 时,我得到的值为零。

应该如何更改我的数据类?

编辑:

我的主课:

public class MyClass{

private Status status;
private Data data;
private String hash;

public Data getData() {
    return data;
}
// other getter and setters
}

改造和 RxJava:

RetrofitService service1 = ServiceFactory.createRetrofitService(RetrofitService.class, RetrofitService.API_ENDPOINT);
    service1.data()
            .subscribeOn(Schedulers.newThread())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Subscriber<MyClass>() {

                @Override
                public final void onNext(MyClass response) {

                    if(response.getData().getRestaurants().size() == 0)
                        Log.d("1", "size is ZERO ");

                }
            });

最佳答案

解决方案是不使用 Data 类,而是将 MyClass 更改为:

public class MyClass{

private Status status;

@SerializedName("data")
private Map<String, Restaurant> data;

private String hash;

public Map<String, Restaurant> getData() {
    return data;
}
// other getter and setters
}

关于android - 使用 Retrofit 将动态 JSON 解析为 POJO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31853017/

相关文章:

java - 计时码表 H :MM:SS

php - YouTube API v3 未检索 channel 的视频

java - 空指针异常 : JSON Parsing in JAVA using GSON

android - 使用 gson 解析 JSON 对象

java - 如何使用 openGL 和贝塞尔曲线创建拼图 block ?

android - 关于多个dex文件定义Lcom/google/gson/JsonSerializer

php - 从另一个 PHP 调用一个 PHP(不带 cURL)

第二次调用时Android AsyncTask不执行

java.lang.NoClassDefFoundError : com. google.gson.stream.JsonReader 在使用 Amazon S3 上传图像时在 android 中的 Pre-Lollipop 上出错

安卓工作室: "Gradle is running. Proceed with Project closing?"