代码之家  ›  专栏  ›  技术社区  ›  SugarSecret

从对象中获取HashMap值[重复]

  •  0
  • SugarSecret  · 技术社区  · 2 周前

    我有一个这样的json

    
    
    {
    
      "data": {
    
        "category": {
    
          "name_en": "Trend",
    
          "style": "normal"
    
        },
    
        "items": [
    
          {
    
            "title_en": "The Garfield Movie",
    
            "imdb_rank": 5.8,
    
            "country": "US",
    
            "company": " Columbia Pictures"
    
          }
    
        ]
    
      },
    
      "type": "category"
    
    }
    

    我想获取数据值,然后使用项。 这是我的代码

    map = new Gson().fromJson(
        new Gson().toJson((HashMap<String, Object>) map.get("data")),
        new TypeToken<HashMap<String, Object>>() {}.getType()
    );
    

    但我犯了一个错误: 07-09 19:50:16.615 12794 12794 E AndroidRuntime: java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to java.util.HashMap

    我是这方面的初学者,有人能告诉我如何使用Gson吗?

    将HashMap值获取到HashMap中

    1 回复  |  直到 2 周前
        1
  •  4
  •   llRub3Nll    2 周前

    您遇到此问题是因为 Gson 库使用自己的映射实现 LinkedTreeMap 并且它不是的子类 HashMap ,如错误所示。对此有一些解决方案,您可以调整代码并避免显式强制转换为 哈希图 在处理反序列化时。相反,您可以允许Gson直接将JSON反序列化为它支持的适当Map类型。

    下面是一个代码示例:

    public class Example {
        public static void main(String[] args) {
            String json = "{Your JSON}";
    
            Gson gson = new Gson();
            Map<String, Object> outerMap = gson.fromJson(json, new TypeToken<Map<String, Object>>() {}.getType());
            Map<String, Object> dataMap = gson.fromJson(gson.toJson(outerMap.get("data")), new TypeToken<Map<String, Object>>() {}.getType());
    
            System.out.println(dataMap);
        }
    }
    

    这应该有助于解决这个问题。需要记住和注意的关键时刻:

    1. Gson 默认情况下使用 链接树映射 对于JSON对象,而不是 哈希图 . a.为此,我使用了Map<字符串,对象>而无需将其强制转换为HashMap。
    2. fromJson方法直接处理转换,并使用TypeToken推断正确的类型。

    我也不是一个经验丰富的人,但希望这能有所帮助。