在使用json的时候,多数情况是有实体类与之对应,所有的key的值以及value 的值(及类型)是已知的,这时转换的时候就可以轻松转换,但是假如我们不知道json的返回是什么样子,内部的返回可能是list、map、简单类型等,这时我们需要判断内部是什么类型在做转换,否则会出现类型错误。
如,常用json:{"success":true,"message":null,"data":null}
其中的data可能多种情况:简单map、list、list含map、list含list等,为了获取到我们想要的值,我们可以先对可能的value判断:
Map<String, Object> map = (Map<String, Object>)JsonUtils.jsonToMap(json);
for (Entry<String, Object> key1 : map.entrySet()) {
JsonParser parser = new JsonParser();
JsonElement jsonElement = parser.parse(JsonUtils.object2Json(key1.getValue()));
//如果是JsonObject
if (jsonElement.isJsonObject()) {
JsonObject jsonObject = jsonElement.getAsJsonObject();
String jsonstr = jsonObject.toString();
//如果是JsonArray
} else if (jsonElement.isJsonArray()) {
JsonArray jsonArray = jsonElement.getAsJsonArray();
List<Map<String, Object>> liatMap = (List<Map<String, Object>>)key1.getValue();
for (Map<String, Object> map2 : liatMap) {
}
//其他情况,jsonElement.isJsonPrimitive()或者jsonElement.isJsonNull()
} else {
}
}
这是一个简单片段,根据if判断这样就能在相应分支做处理,很好的解决了json中value值未知时不知道怎么判断的情况。主要的应用:
```
JsonParser parser = new JsonParser();
JsonElement jsonElement = parser.parse(JsonUtils.object2Json(key1.getValue()));
```
根据JsonElement 的类型做判断。