Android 解析不确定类型Json数据

一般情况下我们Json解析都是预定义类型,在网络请求时通过OkHTTP与Gson等解析库直接解析成对应类型的数据。

public class Data {
  public int code;
  public String msg;
  public T data;
}

但是有些情况下后台可能会给我们制造一些意外的情况,某些数据可能是未知的类型 ,比如同一个Json 的key对应的Value可能是不同的类型。

class T{
    public HashMap map;
}

存在Hashmap里面的值可能是String,int,List...

这个时候直接定义为List或着String显然是不可以的,一个Map里面的Value集合可能既有String,又有List。

先看下Gson解析的相关对象

class JsonObject extends JsonElement  ...
classJsonArray extends JsonElement ...


JsonElement里面也有相关的判断

public abstract class JsonElement {
  public boolean isJsonArray() {
    return this instanceof JsonArray;
  }
  public boolean isJsonObject() {
    return this instanceof JsonObject;
  }
}

那么就可以预定义为JsonElement的类型,然后通过具体是Obj还是Array来获取具体的数据类型 。

 public JsonObject getAsJsonObject() {
    if (isJsonObject()) {
      return (JsonObject) this;
    }
    throw new IllegalStateException("Not a JSON Object: " + this);
  }

public JsonArray getAsJsonArray() {
    if (isJsonArray()) {
      return (JsonArray) this;
    }
  }
  

这样拿到最终想要的结果

    JsonObject jsonObject = jsonElement.getAsJsonObject();
      JsonElement value = jsonObject.get(key);
      if (value != null) {
        string = value.getAsString(); 
      }
  ...

你可能感兴趣的:(Android 解析不确定类型Json数据)