【问题标题】:Parse Json with Gson and problems with list使用 Gson 解析 Json 和列表问题
【发布时间】:2016-08-26 09:40:25
【问题描述】:

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

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

{ Token: { TokenId : '123' } }

有时像这样的 JSON:

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

如果我的类设置为包含令牌列表,则 Gson 将无法解析第一个示例中的 JSON。在这两种情况下如何解析 JSON?

【问题讨论】:

  • 您需要检查 API 是否返回 JSON with list 或第一个示例中的类似内容。读取 Tocken 的值并检查它是否是一个列表。如果它是一个列表,则调用函数来解析列表

标签: java json parsing gson


【解决方案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"));

    }

}

【讨论】:

    【解决方案2】:

    在转换为类之前将所有响应转换为类似于第二个示例。

    下面将作为提示

    jsonString=jsonString.replace("{ Token: {","{ Token: [{");
    jsonString=jsonString.replace("} }","}] }");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-12
      • 2012-01-02
      • 1970-01-01
      相关资源
      最近更新 更多