Java 反序列化嵌套json';他和杰克逊在一起
这是我上一个问题的延伸 . 我已经得到了解决方案,但我想尝试使用bean类从json字符串中提取3个值。对于给定的json结构。json结构位于链接中 我正在使用以下代码呼叫jackson:Java 反序列化嵌套json';他和杰克逊在一起,java,json,jackson,Java,Json,Jackson,这是我上一个问题的延伸 . 我已经得到了解决方案,但我想尝试使用bean类从json字符串中提取3个值。对于给定的json结构。json结构位于链接中 我正在使用以下代码呼叫jackson: mainbean obj = mapper.readValue(file, mainbean.class); System.out.println(obj.clientPayload.e.h.getAk()); 我已经为整个层次结构生成了POJO,mainbean类如下所示: public class m
mainbean obj = mapper.readValue(file, mainbean.class);
System.out.println(obj.clientPayload.e.h.getAk());
我已经为整个层次结构生成了POJO,mainbean类如下所示:
public class mainbean {
public Cpld cp;
public Cpld getCp() {
return Cp;
}
public void setCp(Cpld cp) {
this.cp= cp;
}
public SPL getSp() {
return sp;
}
public void setSp(SPL sp) {
this.sp= sp;
}
private SPL sp;
@Override
public String toString() {
return "mainbean [cp=" + cp+ "]";
}
}
其次是Cpld类
public class Cpld {
public E e;
public E getE() {
return e;
}
public void setE(E e) {
this.e = e;
}
public String toString(){
return "E string" + e;
}
}
然后是e班
public class E {
public H h;
public H getH() {
return h;
}
public void setH(H h) {
this.h = h;
}
public C c;
public B b;
public TT tt;
public C getC() {
return c;
}
public void setC(C c) {
this.c = c;
}
public B getB() {
return b;
}
public void setB(B b) {
this.b = b;
}
public TT getTt() {
return tt;
}
public void setTt(TT tt) {
this.tt = tt;
}
}
等等。。。我有个例外
Exception in thread "main" com.fasterxml.jackson.databind.JsonMappingException: Can not instantiate value of type [simple type, class JsonPath.Cpld] from JSON String; no single-String constructor/factory method (through reference chain: JsonPath.mainbean["clientPayload"])
at com.fasterxml.jackson.databind.deser.std.StdValueInstantiator._createFromStringFallbacks(StdValueInstantiator.java:419)
at com.fasterxml.jackson.databind.deser.std.StdValueInstantiator.createFromString(StdValueInstantiator.java:295)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromString(BeanDeserializer.java:405)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:117)
at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:336)
at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:89)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:290)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:112)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2577)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:1764)
有人能给我指出正确的方向吗。。。
提前谢谢你的帮助
更新:
Json文件:因为
CP
的顶级Json对象的值是Json对象的字符串表示,而不是Json对象本身,所以您的Cpld
类需要一个显式构造函数,该构造函数接受字符串并将其反序列化到此对象的属性中。只需向Clpd类添加一个空构造函数即可