<string,string =“”> hashmap中的整数对象

时间:2017-02-16 04:17:07

标签: java json hashmap

  1. 创建一个(String,Object)hashMap并放置不同类型的值。
  2. 将散列映射序列化为json字符串并转换回(String,String)的散列映射
  3. 当我尝试获取键“key2”的值时,它将抛出异常,说“线程中的异常”主“java.lang.ClassCastException:java.lang.Integer无法强制转换为java.lang.String”

    有解释这个问题的好方法吗?这是否意味着即使我有一个(String,String)映射,其中的值也不是必需的String?

    为任何混淆道歉。如果有什么不清楚,请告诉我。

    Map<String, Object> map = new HashMap<>();
    map.put("key1", "value1");
    map.put("key2", 99);
    map.put("key3", new Date());
    
    
    JsonUtil jsonUtil = new JsonUtil();
    
    String s = jsonUtil.toJson(map);
    
    HashMap<String, String> newMap = jsonUtil.fromJson(s, HashMap.class);
    
    String value = newMap.get("key2");
    

3 个答案:

答案 0 :(得分:1)

在map中,键“key2”的值为99,这是一个整数。可能在第二行到最后一行抛出异常,而不是最后一行。我不完全确定你为什么要序列化然后立即反序列化,但是如果你只想将99作为像“99”这样的字符串,那么这样做的方法是:

String value = String.valueOf(map.get("key2"));

在这种情况下,不需要序列化和反序列化。

更好的是,如果你一直想要Map<String, String>,你可以这样做:

Map<String, String> map = new HashMap<>();
map.put("key1", "value1");
map.put("key2", String.valueOf(99));
map.put(new Date().toString());

答案 1 :(得分:1)

当您致电fromJson(s, HashMap.class)时,您并未向解码器提供任何通用类型信息 - 它看到的只是HashMap,并且该调用的隐式返回类型为{{1 }}。 JSON可以假设字符串键,并且解码器正在尽力将对象解码为他们的&#34; native&#34;表示,所以当你告诉编译器所有的键和值都是字符串时,就会出现不匹配的情况。

如果您指定涉及哪个 HashMap<?,?>,我们可能会提供更具体的方法;否则,您可以使用类似流转换的方法将每个值转换为JsonUtil

答案 2 :(得分:0)

String value = newMap.get("key2");

在此行中,您将在hashMap中获取key2的值,然后将其分配给无效的String类型变量value。由于key2的值为Integer类型,因此无法直接执行此操作。您可以将此值放在“整数类型变量”中。如下:

int value = newMap.get("key2");

或者,如果您想要一个通用解决方案,以便可以将任何类型的变量分配到value,那么您可以将其声明为Object类型。如下:

Object value = newMap.get("key2");