fastjson将json转为Map踩坑

  1. 字符串
    对于一个json字符串
String str = "{"specItem":"[红, 大]","specName":"颜色, 尺寸","goodsPrice":2,"stock":0}";
//以上是未转义过的,如果你想直接写在代码中测试的话,记得转义,例如如下:(请勿直接复制下面)
String str = "{\"specItem\":\"[红, 大]\",\"specName\":\"颜色, 尺寸\",\"goodsPrice\":2,\"stock\":0}";
  1. json转化
    ** 以下是错误示范 **
Map<String,String> map = (Map<String,String>) JSON.parse(s);
  1. 获取数据
int stock = Integer.parseInt(map.get("stock"));

此时会报错
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer

  1. 坑的原因
    通过JSON.parse()获得的Map,我们打印就能看出来
{"stock":1,"specItem":"[红, 大]","specName":"颜色, 尺寸","goodsPrice":1}

我们可以看到,对于stock来说,他的值并不是字符串"1",而是1;,直接将其转化为String的时候就会报错,相当于写了一个String str = 1;

  1. 解决方法
    所以我们不能使用(Map<String,String>) JSON.parse(s);来强转
    而应该使用(Map<String,Object>) JSON.parse(s);
    之后在获取值的时候,调用toString()将其转化为String
int stock = Integer.parseInt(map.get("stock").toString);

fastjson将json转为Map<String,String>踩坑

上一篇:css:图片相对定位的情况下,左右居中显示


下一篇:HTML&&CSS