首页 > 解决方案 > 动态密钥 json 从 WebService 获取响应?

问题描述

以下是网络服务 URL 响应:

{  
 "Status":"Success",
 "StatusCode":"200",
 "Message":"data fetch successfully.",
 "Data":{  
  "1":{  
     "OptionGroupName":"OPTION",
     "OptionGroupId":"122",
     "OptionCount":2,
     "Options":[  
        {  
           "OptionGroupId":"122",
           "OptionGroupName":"Option",
           "ProductId":"2861",
           "OptionId":"329",
           "OptionName":"Hot",
           "OptionPrice":"4.00",
           "IsActive":"1"
        },
        {  
           "OptionGroupId":"122",
           "OptionGroupName":"Option",
           "ProductId":"2861",
           "OptionId":"330",
           "OptionName":"Ice",
           "OptionPrice":"4.30",
           "IsActive":"1"
        }
     ]
  }
 }
}

下面是模型类;

public class Elements{

@SerializedName("Data")
@Expose
private Map<String, Data> Data;

public Map<String, Data> getFeeds() {
    return Data;
}

public void setFeeds(Map<String, Data> Data) {
    this.Data = Data;
}

public class Data {
    @SerializedName("OptionGroupName")
    @Expose
    private String OptionGroupName;

    public String getOptionGroupName() {
        return OptionGroupName;
    }

    public void setOptionGroupName(String optionGroupName) {
        OptionGroupName = optionGroupName;
    }
}

}

以下是获取响应的代码;

  Map<String, String> jsonObject = new HashMap<>();
    jsonObject.put("productid", "2861");
    jsonObject.put("multiple", "1");

    ApiHandler.getApiService().place_order(jsonObject,
            new Callback<Elements>() {
                @RequiresApi(api = Build.VERSION_CODES.KITKAT)
                @Override
                public void success(Elements placeOrderModel, Response
                        response) {

                    Log.e("response.getElemDetails()",""+response.getBody());
                    Gson gson = new Gson();
                    Elements myObj  = gson.fromJson(response.toString(),
                            new TypeToken<Elements>(){}.getType());


                    for (int i=0;i<myObj.getFeeds().size();i++)
                    {
                        Log.e("data",""+myObj.getFeeds().get(i).getOptionGroupName());
                    }
                }

                @Override
                public void failure(RetrofitError error) {

                }
            });

我无法使用模型类解析 json。如何使用改造获得动态密钥 json 的响应?

标签: androidweb-servicesretrofitretrofit2

解决方案


您可以在下面找到另一个动态密钥 json 获取响应的答案

JSON

  {  
   "tom@example.com":{  
  "_from":"giles@gmail.com",
  "message":{  
     "from":"giles@gmail.com",
     "detail":"AnyonewanttomeetmeinParis"
  }
  },
 "harry@example.com":{  
  "_from":"giles@gmail.com",
  "message":{  
     "from":"giles@gmail.com",
     "detail":"AnyonewanttomeetmeinParis"
  }
  }
 }

网络服务调用

        ApiHandler.getApiService().place_order2(
            new Callback<Object>() {
                @RequiresApi(api = Build.VERSION_CODES.KITKAT)
                @Override
                public void success(Object placeOrderModel, Response
                        response) {

                    Log.e("WWWWWWWWWWWWWWWWWWW",""+placeOrderModel.toString());
                    JSONObject jsonData = null;
                    try {
                        jsonData = new JSONObject(placeOrderModel.toString());
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                    Iterator itr = jsonData.keys();
                    while(itr.hasNext()) {
                        String keys = (String) itr.next();
                        Log.e("Keys", "----" + keys);

                        try {
                            JSONObject issue = jsonData.getJSONObject(keys);
                            String _pubKey = issue.optString("_from");
                            Log.e("_from", "----" + _pubKey);

                            dataModel = new DataModel(keys,_pubKey);
                            dataModelArrayList.add(dataModel);

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }

                    historyAdapter = new HistoryAdapter(dataModelArrayList);
                    rvHistoryList.setAdapter(historyAdapter);
                }

                @Override
                public void failure(RetrofitError error) {

                }
            });

推荐阅读