赞
踩
像一般的请求接口规范,请求回来的类型是相同的,但是有某些不规范,返回的类型,比如一个key为sum,返回如果值是有值就返回1或2或3这种int类型,如果没有值就返回""或者null,这种String类型才能解析的
请求返回结果
//有值的话
{
sun:32
}
//没有值
{
sum:""
}
//或者null
{
sum:null
}
如果使用Gson解析工厂的话是解析不出来的,那么我们就需要自己去手动解析,判断一下类型,但是手动的话,少数可以,多数的话太麻烦
在最开始如果使用Retrofit请求的话,retrofit是没有提供直接取出返回的json的,所以我们需要把 我们的请求返回的类型改成okhtttp的ResponseBody
@GET("xxxx/xxxx")
Observable<ResponseBody> findDataByOrgIdOrder (@QueryMap HashMap<String,String> hashMap , @Header("MenuCode") String string);
在请求的地方收到
//这里是拿到数据,然后放入方法
String string = requestBody.string();
//key值是你那个那个key 通过hashMap.get(Key); 就能得到
//此处的hashmap 就是你解析完成的数据,只不过Value值都是String,看你自己需要自己改
HashMap<String,String> hashmap = JsonUtil.jsonToMap(string, false);
比如想获取上方得sum
//就可以获取到里面的值
hashmap.get("sum");
如果想要遍历得话 ,就变成迭代器
//完成遍历
Iterator<String> keys =hashmap.keySet().iterator();
while (keys.hasNext()){
String key = keys.next();
hashmap.get(key);
这里我自己从网上借鉴和自己结合了一波,不管返回的是什么类型,最后都是返回的就是HashMap<String,String>类型的hashmap,最后方便使用,但是缺点就是最外层的话我还没有去掉,所以只能在你自己手动解析到里面,去使用。(我这里只涉及到String,int,double。如果想全部类型的话,就一个判断接着一个判断,全部放入,最后未知类型都可以解析出来)
public class JsonUtil { private static JsonUtil Instance = null; //单例模式 public static JsonUtil getInstance() { if (Instance == null) { Instance = new JsonUtil(); } return Instance; } //todo 将json对象转换成Map //jsonstr 是传过来需要解析的字符串 hashmap是接收的HashMap // isShowLog(这个就是方便查看解析到哪里失败了就可以)是控制是否打印的boolean tue为打印 false为不打印 //目前能解析int和double还有String 如果需要自己可以在后面添加 public static HashMap jsonToMap(String jsonstr, boolean isShowLog) throws JSONException { //todo 拿到json后丢进来转换成为object对象 JSONObject jsonObject = new JSONObject(jsonstr); //todo 接受返回值对象,封装最后返回的Map对象 HashMap<Object, Object> result = new HashMap<>(); //todo 获取所有的KEY Iterator<String> iterator = jsonObject.keys(); String key = null; //todo 因为value可能是任何类型,所以用所有类型的超类object接收 Object value = null; //todo 此时iterator为所有的key,hasNext()如果有值的话 while (iterator.hasNext()) { //todo 拿到一个值 key = (String) iterator.next(); //todo 拿到key所对应的value是一个object类型 value = jsonObject.get(key); if (value instanceof String) { if (isShowLog) { Log.e("key, jsonObject.optString", key + "——" + jsonObject.optString(key, "")); } result.put(key, jsonObject.optString(key, "")); } else if (value instanceof Integer) { if (isShowLog) { Log.e("key, jsonObject.optInt", key + "——" + jsonObject.optInt(key, 0)); } result.put(key, "" + jsonObject.optInt(key, 0)); } else if (value instanceof Double) { if (isShowLog) { Log.e("key, jsonObject.get", key + "——" + jsonObject.optDouble(key, 0)); } result.put(key, "" + jsonObject.optDouble(key, 0)); } else { if (isShowLog) { Log.e("key, jsonObject.optString", key + "——" + jsonObject.get(key)); } result.put(key, (String) value); } } return result; } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。