我的服务器团队定义了一个可怕的响应,它可能是像{key1=value1, key2=value2}
这样的json对象,可能是像[{key3=value3, key4=value4}, {key3=value3a, key4=value4a}]
这样的json数组。
这两种类型具有如下逻辑关系:对于单个API,服务器将:
我不能告诉他们改变这个,因为这个响应被PC和iOS等其他目的使用。
那么我应该怎么做这个四个字母的字响应呢?我使用网络改造和GSON进行响应反序列化。
答案 0 :(得分:1)
JsonParser
从字符串JsonElement
JsonElement
的类型(例如JsonArray
或JsonObject
)(通过JsonElement::isJsonArray
和JsonElement::isJsonObject
)Gson::fromJson
static class Entity {
String name;
// other fields
}
static class Error {
String errorName;
// other fields
}
public static void main(String[] args) throws Exception {
// no error
String jsonString = "[{'name': 'one'}, {'name': 'two'}]";
// error
// String jsonString = "{'errorName': 'Not Found'}";
Gson gson = new Gson();
JsonElement jsonElement = new JsonParser().parse(jsonString);
if (jsonElement.isJsonArray()) {
// no error
Entity[] entities = gson.fromJson(jsonElement, Entity[].class);
System.out.println(entities[0].name);
} else if (jsonElement.isJsonObject()) {
// error
Error error = gson.fromJson(jsonElement, Error.class);
System.out.println(error.errorName);
} else {
throw new IOException("Server response is not jsonElement array or jsonElement object");
}
}