【问题标题】:Parsing dynamic JSON to POJO with Retrofit使用 Retrofit 将动态 JSON 解析为 POJO
【发布时间】:2015-08-06 10:13:29
【问题描述】:

您好,我有 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 ");

                }
            });

【问题讨论】:

    标签: android json gson retrofit


    【解决方案1】:

    解决方案是不使用 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
    }
    

    【讨论】:

      【解决方案2】:

      以下两个类应该适合你。

      class Data {
          Map<String, List<Outlet>> types;
      }
      
      class Outlet {
      String SubFranchiseID;
      String OutletID;
      String OutletName;
      }
      

      【讨论】:

      • 仍然将 getRestaurants().size() 设为零
      • 请同时发布您的主要课程
      猜你喜欢
      • 2016-02-14
      • 2017-09-06
      • 2016-01-09
      • 1970-01-01
      • 1970-01-01
      • 2013-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多