用Gson解析Json和列表问题

时间:2016-08-26 09:40:26

标签: java json parsing gson

我使用Gson来解析从外部API返回的JSON String来表示Java类。一切正常,但我有一个问题,我无法解决。

问题是外部API有时会返回这样的JSON:

{ Token: { TokenId : '123' } }

有时JSON就像这样:

{ Token: [{ TokenId : '123' }, { TokenId : '124' }] }

如果我的类被设置为包含Tokens列表,那么Gson将无法从第一个示例解析JSON。在两种情况下如何设法解析JSON?

2 个答案:

答案 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("} }","}] }");