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);


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM