【问题标题】:Parse json list with gson使用 gson 解析 json 列表
【发布时间】:2019-08-20 12:40:27
【问题描述】:

我有以下 json 字符串:

[["aaa",-1],["awf",1],["gdr",-1]]

我想将该列表解析为键值哈希映射,以便它具有如下条目:

key: aaa, value: -1
key: awf, value: 1
key: gdr, value: -1

我用 gson 尝试了不同的逻辑,但没有成功。谁能指出我正确的方向?

编辑:试过这个:

JsonObject jsonObject = new Gson().fromJson(b, JsonObject.class)

我收到以下错误:

com.google.gson.JsonSyntaxException: Expected a com.google.gson.JsonObject but was com.google.gson.JsonArray

【问题讨论】:

  • GSON 在将 JSON 映射到等效对象模型时会派上用场,但是您的模型需要在 JSON 和 Java 之间进行转换,因此我宁愿使用普通的 JSON 解析器将您的数组数组解析为 Map。
  • 您是否考虑过将 JSON 解析为其实际表示的内容(一个 2 元素数组的数组),然后将该数据映射到您的 hashmap(使用 Stream 或普通的 for 循环)?在我看来,它更容易实现和维护。
  • 您应该添加一个最小的可重现示例。也就是说,你尝试的代码,错误是什么。否则,您的问题很快就会结束。
  • 您的 JSON 是一个数组数组。您可以将其更改为对象数组吗? [{"aaa": -1}, {"afw": 1}, {"gdr": -1}]?这样一来,JSON 库可能会轻松创建映射,但在数组中它不知道键和值应该是什么。

标签: java gson


【解决方案1】:

您可以使用 com.google.gson.reflect.TypeToken 将 json 列表转换为 HashMap。

String jsonString = "[[\"aaa\",-1],[\"awf\",1],[\"gdr\",-1]]";
Gson gson = new Gson();
Type type = new TypeToken<HashMap<String, Integer>>(){}.getType();
HashMap<String, Integer> fromJson = gson.fromJson(jsonString, type);
System.out.println(fromJson);

【讨论】:

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