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