我使用Gson来解析从外部API返回的JSON String来表示Java类。一切正常,但我有一个问题,我无法解决。
问题是外部API有时会返回这样的JSON:
{ Token: { TokenId : '123' } }
有时JSON就像这样:
{ Token: [{ TokenId : '123' }, { TokenId : '124' }] }
如果我的类被设置为包含Tokens列表,那么Gson将无法从第一个示例解析JSON。在两种情况下如何设法解析JSON?
答案 0 :(得分:1)
快速完成此操作如下
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.stream.JsonReader;
public class Clazz {
public static void main(String[] args) throws Exception {
String singularJson = "{ Token: { TokenId : '123' } }";
String multipleJson = "{ Token: [{ TokenId : '123' }, { TokenId : '124' }] }";
JsonElement jsonElementToken = new JsonParser().parse(multipleJson);
JsonElement jsonCollectionOrSingular = jsonElementToken.getAsJsonObject().get("Token");
if (jsonCollectionOrSingular.isJsonArray()) {
System.out.println("It is an collection and not a object");
JsonArray jsonArray = jsonCollectionOrSingular.getAsJsonArray();
System.out.println(jsonArray.get(0).getAsJsonObject().get("TokenId"));
} else {
System.out.println("It is an object and not a collection");
JsonObject jsonObject = jsonCollectionOrSingular.getAsJsonObject();
System.out.println(jsonObject.get("TokenId"));
}
}
答案 1 :(得分:0)
在转换为class之前,将所有响应转换为类似第二个示例。
以下将作为提示
jsonString=jsonString.replace("{ Token: {","{ Token: [{");
jsonString=jsonString.replace("} }","}] }");