Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 反序列化嵌套json';他和杰克逊在一起_Java_Json_Jackson - Fatal编程技术网

Java 反序列化嵌套json';他和杰克逊在一起

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

这是我上一个问题的延伸 . 我已经得到了解决方案,但我想尝试使用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 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类添加一个空构造函数即可