<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">今天心血来潮,想写一个简易的购物车,里面放入:最新加入的书名,当前购物车中书本总数,当前购物车中的总价格,以及当前购物车的明细,如下:</span>
//购物车明细
private HashMap<String,ShoppingCartItem> shoppingCart;
//书本总数
private Integer totalNumber;
//总价格
private Double totalPrice;
//当前书本
private String bookName;
结果,JSONString字符串-->Object后,其中map的value类型无法解析出来,测试类如下:
package shoppingCart;
import java.util.HashMap;
import net.sf.json.JSONObject;
public class Test_JSONMap {
public static void main(String[] args) {
//创建对象
HashMap<String,ShoppingCartItem> shoppingCart=new HashMap<String,ShoppingCartItem>();
shoppingCart.put("js", new ShoppingCartItem(12.0,1,"js"));
ShoppingCart sc=new ShoppingCart(shoppingCart);
sc.setBookName("js");
sc.setTotalNumber(11);
//解析成JsonString
JSONObject jsonObj=JSONObject.fromObject(sc);
String jsonStr=jsonObj.toString();
System.out.println(jsonStr);
//-->obj
JSONObject jsonObjS=JSONObject.fromObject(jsonStr);
sc=(ShoppingCart) JSONObject.toBean(jsonObjS, ShoppingCart.class);
System.out.println(sc.getShoppingCart().get("js"));
System.out.println(sc.getShoppingCart().get("js").getNumber());
}
}
控制台显示:
1
{"bookName":"js","shoppingCart":{"js":{"itemName":"js","number":1,"unitPrice":12}},"totalNumber":1,"totalPrice":12}
net.sf.ezmorph.bean.MorphDynaBean@64c0d2d3[
{itemName=js, number=1, unitPrice=12}
]
Exception in thread "main" java.lang.ClassCastException: net.sf.ezmorph.bean.MorphDynaBean cannot be cast to shoppingCart.ShoppingCartItem
at shoppingCart.Test_JSONMap.main(Test_JSONMap.java:23)
value的类型变成了
MorphDynaBean
而不是我们放入时的
ShoppingCartItem
解析报错,由此,JSON中放入复杂对象,当对象的某属性是Map时,获取到了这个Map后,对里面的属性getKey时,返回的类型可能已经发生了变化!