Retrofit2.0 Json解析成HashMap
1、比如,接口返回数据如下所示:
{
"id": 11,
"name": "电量仪E3",
"A相功率因数": "0.0",
"A相总功率": "0.0",
"A相无功功率": "0.0",
"A相视在功率": "0.0",
"B相功率因数": "0.0",
"B相总功率": "0.0",
"B相无功功率": "0.0",
"B相视在功率": "0.0",
"C相功率因数": "0.0",
"C相总功率": "0.0",
"C相无功功率": "0.0",
"C相视在功率": "0.0",
"报错": "0.0",
"A相电流": "0.0",
"B相电流": "0.0",
"C相电流": "0.0",
"A相功率": "0.0",
"B相功率": "0.0",
"C相功率": "0.0",
"A相电压": "0.0",
"B相电压": "0.0",
"C相电压": "0.0",
"系统功率因数": "0.0",
"系统无功功率": "0.0",
"系统有功功率": "0.0",
"系统视在功率": "0.0",
"频率": "0.0",
"系统总功率": "0.0",
"AB线电压": "0.0",
"AC线电压": "0.0",
"BC线电压": "0.0",
"负荷特性": "0.0"
}
2、按照json解析成Hash,而不是转化为pojo,目的是为了更好地显示数据,如下图:
google过,按照别人的文章,我自己试了一下:
Call<Response> call = myService.getDeviceData(room_id, device_id);
call.enqueue(new Callback<Response>() {
@Override
public void onResponse(Response<Response> response) {
if (response.body().code() == 200) {
String jsonString = response.body().toString();
System.out.println(">>>>>>>>>");
System.out.println(jsonString);
System.out.println(">>>>>>>>>");
} else {
}
}
@Override
public void onFailure(Throwable t) {
System.out.println("设备数据获取失败");
// TODO: 16/2/22 错误处理
}
});
但是运行时会报错:'retrofit2.Response' is not a valid response body type. Did you mean ResponseBody?
总结:我需要展示json数据的key和value,如果有可行的解决方案,不转化成hashmap也行,,希望各位朋友们能指点迷津,谢谢啦
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
Retrofit 自带了转换的功能,可以将服务器返回的数据自动解析为你的Java Bean,所以这个地方你不能使用Response。
你可以直接用 HashMap<String,String> 代替 Response,即:
相应的,你的接口也要改返回值的范型,我这边用的是Retrofit 2.0,你的版本如果回调中没有
Call<HashMap<String,String>> call
就忽略。同样的你还可以 把
HashMap<String,String>
换为JSONObject
(实际上里面就是Map)