android - 动态密钥 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 的响应?
解决方案
您可以在下面找到另一个动态密钥 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) {
}
});
推荐阅读
- angular - 使用 forge-viewer/node_modules/@types/three 中的 THREE 会导致编译器错误
- android - Android studio Camera 2 全屏保存视频
- sql - 如何组合 SQL 中的列来创建日期时间格式?
- html - 有没有办法让 div-A 的子元素(z-index 小于 div-B)出现在 div-B 的“顶部”?
- php - 使用 PHP 列出文件夹和子文件夹中的图像文件,并按创建日期对它们进行排序
- javascript - 如何在 Reactjs 的屏幕上显示数组中的对象
- php - https 重定向 laravel .htaccess 后删除 /public
- javascript - 适用于 PC 和移动设备的网站的 CSS 导航栏,但不适用于移动设备尺寸
- python - kedro-airflow 创建抛出错误的 DAG
- xcode - 在 React-Native Facebook SDK 上重新定义模块“FBSDKCoreKit”错误