我使用json-lib将json对象转换为java。 代码如下:
public class JsonConvertorDemo {
public static void main(String[] args) {
B b1 = new B("b1");
Map<String, B> bMap = new HashMap<String, B>();
bMap.put("key1", b1);
A a1 = new A(bMap);
JSONObject jsonObject = JSONObject.fromObject(a1);
String json = jsonObject.toString();
jsonObject = JSONObject.fromObject(json);
Map<String, Class> classMap = new HashMap<String, Class>();
classMap.put("bMap", Map.class);
a1 = (A) JSONObject.toBean(jsonObject, A.class, classMap);
bMap = a1.getbMap();
System.out.println(bMap.get("key1").getB1());
}
}
public class A {
private Map<String, B> bMap = new HashMap<String, B>();
public A() {}
public A(Map<String, B> bMap) {
this.bMap = bMap;
}
public Map<String, B> getbMap() {
return bMap;
}
public void setbMap(Map<String, B> bMap) {
this.bMap = bMap;
}
}
public class B {
private String b1;
public B() {}
public B(String b1) {
this.b1 = b1;
}
public String getB1() {
return b1;
}
public void setB1(String b1) {
this.b1 = b1;
}
}
抛出以下异常:
线程“main”中的异常java.lang.ClassCastException:
net.sf.ezmorph.bean.MorphDynaBean无法强制转换为code.orgexample.json.B
at code.orgexample.json.JsonConvertorDemo.main(JsonConvertorDemo.java:30)
有没有办法在json-lib中指定地图值的类类型?
非常感谢您的帮助。
答案 0 :(得分:1)
说here fromObject 接受JSON格式的字符串,Maps,DynaBeans和JavaBeans
答案 1 :(得分:1)
正如chro所说:
这里说fromObject接受JSON格式的字符串,Maps,DynaBeans和JavaBeans
在我的代码中,ClassCastException是由:
引起的for (TheClass childNode : command.getChildren()) {
将代码更改为以下内容时,一切都按预期工作:
for (Object childNode : command.getChildren()) {
JSONObject fromObject = JSONObject.fromObject(childNode);
TheClass childCommand = (TheClass) JSONObject.toBean(fromObject,
TheClass.class);
}
答案 2 :(得分:1)
http://hw1287789687.iteye.com/admin/blogs/1993048
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setRootClass(Class2.class);
Map<String, Class> classMap = new HashMap<String, Class>();
classMap.put("students", Student.class); // 指定JsonRpcRequest的request字段的内部类型
jsonConfig.setClassMap(classMap);
答案 3 :(得分:0)
要尽快解决问题,请提交您所有的JsonConverterDemo,A和B类代码。 特别是,缺少包装声明,导入语句和行号阻碍确定问题所在。
答案 4 :(得分:0)
有没有办法在json-lib中指定地图值的类类型?
不。在反序列化为List<CustomType>
时也是如此,即使您通过toBean
调用告诉它您想要的类型。
调用toBean
后,集合中的值将为DynaBeans
。您必须遍历集合值并将其转换为首选类型。变形可以手动完成,一次一个字段,或者以net.sf.ezmorph.Morpher
中注册MorpherRegistry
的更自动方式完成。
警告:即使采用这种方法,在将其变形为目标类型的实例之前,必须注意如何引用该值。编译器(以及运行时)认为该值是参数化类型(如果使用泛型),因此很乐意尝试将其用作该类型。这当然会导致ClassCastException(即使您的代码没有进行任何显式类型转换)。因此,在访问值时,只需通过声明Object
类型的引用并使用它来获取它们。如果没有明确的Object
类型引用,请不要尝试以任何其他方式使用这些值。 (当你编写代码并看到错误时,你会知道我在说什么。我现在太忙了,无法编写代码示例。)