Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java地图<;字符串,对象>;投射到地图<;字符串,字符串>;不在运行时抛出错误 private静态字符串tmp=“{\'data\”:{\'vin\”:“LNBSCAK9JD065606\”,“extParameter\”:{\'systemTime\”:“2019-01-23 12:58:35\”,“fuelAmount\”:20.0},“pushType\”:“fuelWarn\”,“type\:“uaes物联网公共服务”; 公共静态void main(字符串[]args){ JSONObject JSONObject=JSON.parseObject(tmp); JSONObject data=JSON.parseObject(JSONObject.getString(“数据”); //第1行 Map result=(Map)data.getInnerMap().get(“extParameter”); 对于(Map.Entry项:result.entrySet()){ String key=item.getKey(); //第2行 字符串值=item.getValue(); } }_Java_Collections_Classcastexception - Fatal编程技术网

Java地图<;字符串,对象>;投射到地图<;字符串,字符串>;不在运行时抛出错误 private静态字符串tmp=“{\'data\”:{\'vin\”:“LNBSCAK9JD065606\”,“extParameter\”:{\'systemTime\”:“2019-01-23 12:58:35\”,“fuelAmount\”:20.0},“pushType\”:“fuelWarn\”,“type\:“uaes物联网公共服务”; 公共静态void main(字符串[]args){ JSONObject JSONObject=JSON.parseObject(tmp); JSONObject data=JSON.parseObject(JSONObject.getString(“数据”); //第1行 Map result=(Map)data.getInnerMap().get(“extParameter”); 对于(Map.Entry项:result.entrySet()){ String key=item.getKey(); //第2行 字符串值=item.getValue(); } }

Java地图<;字符串,对象>;投射到地图<;字符串,字符串>;不在运行时抛出错误 private静态字符串tmp=“{\'data\”:{\'vin\”:“LNBSCAK9JD065606\”,“extParameter\”:{\'systemTime\”:“2019-01-23 12:58:35\”,“fuelAmount\”:20.0},“pushType\”:“fuelWarn\”,“type\:“uaes物联网公共服务”; 公共静态void main(字符串[]args){ JSONObject JSONObject=JSON.parseObject(tmp); JSONObject data=JSON.parseObject(JSONObject.getString(“数据”); //第1行 Map result=(Map)data.getInnerMap().get(“extParameter”); 对于(Map.Entry项:result.entrySet()){ String key=item.getKey(); //第2行 字符串值=item.getValue(); } },java,collections,classcastexception,Java,Collections,Classcastexception,上面的代码抛出一个 第2行的ClassCastExecOption:java.math.BigDecimal无法强制转换为 java.lang.String 但是结果类型实际上是Map[String,String],如果Map的值类型不是String,为什么在第1行抛出ClassCastExecption正在存储十进制值,因此系统正在尝试将您的十进制转换为您尝试转换的字符串,这样将抛出错误。结果类型仅为映射,因为您有一个不安全的转换。将会有一个编译器警告 泛型类型仅在编译时存在,在运行时映射不检

上面的代码抛出一个

第2行的ClassCastExecOption:java.math.BigDecimal无法强制转换为 java.lang.String


但是结果类型实际上是
Map[String,String]
,如果Map的值类型不是String,为什么在第1行抛出
ClassCastExecption
正在存储十进制值,因此系统正在尝试将您的十进制转换为您尝试转换的
字符串
,这样将抛出错误。

结果类型仅为
映射
,因为您有一个不安全的转换。将会有一个编译器警告

泛型类型仅在编译时存在,在运行时映射不检查其组件类型

String value=item.getValue()

由于泛型类型的原因,编译器认为此映射只包含
字符串
,因此您可以编写上述行。但它实际上编译成的是

private static String tmp = "{\"data\":{\"vin\":\"LNBSCCAK9JD065606\",\"extParameter\":{\"systemTime\":\"2019-01-23 12:58:35\",\"fuelAmount\":20.0},\"pushType\":\"fuelWarn\"},\"type\":\"uaes-iot-public-service\"}";

public static void main(String[] args) {
    JSONObject jsonObject = JSON.parseObject(tmp);
    JSONObject data = JSON.parseObject(jsonObject.getString("data"));
    // line 1
    Map<String, String> result = (Map<String, String>) data.getInnerMap().get("extParameter");

    for (Map.Entry<String, String> item: result.entrySet()) {
        String key = item.getKey();
        // line 2
        String value = item.getValue();
    }
}
如果值恰好是其他值,则此操作将失败

“fuelAmount”:20.0

这不是JSON中的字符串。 您必须自己将其转换为字符串(或处理从映射返回的其他类型的值)

最好的解决方案可能是生成一些“bean”类,以便JSON解析器反序列化到其中。这些可以具有命名和类型化属性

String value = (String) item.getValue(); // cast inserted by compiler