Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.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列表转换为POJO_Java_Json_Jackson - Fatal编程技术网

Java 将JSON列表转换为POJO

Java 将JSON列表转换为POJO,java,json,jackson,Java,Json,Jackson,我很难将这一点JSON放到POJO中。我使用的Jackson配置如下: protected ThreadLocal<ObjectMapper> jparser = new ThreadLocal<ObjectMapper>(); public void receive(Object object) { try { if (object instanceof String && ((String)object).lengt

我很难将这一点JSON放到POJO中。我使用的Jackson配置如下:

protected ThreadLocal<ObjectMapper> jparser = new ThreadLocal<ObjectMapper>();

    public void receive(Object object) {
    try { 
        if (object instanceof String && ((String)object).length() != 0) {
            ObjectDefinition t = null ; 
            if (parserChoice==0) { 
                if (jparser.get()==null) {
                    jparser.set(new ObjectMapper());
                }
                t = jparser.get().readValue((String)object, ObjectDefinition.class);
            }

            Object key = t.getKey();
            if (key == null)
                return;
            transaction.put(key,t); 
        } 
    } catch (Exception e) { 
        e.printStackTrace();
    }
}
最后,这里是我目前拥有的java类:

    protected Entities entities;
@JsonIgnoreProperties(ignoreUnknown = true)
protected class Entities {
    public Entities() {}
    protected Tags tags;
    @JsonIgnoreProperties(ignoreUnknown = true)
    protected class Tags {
        public Tags() {}

        protected String text;

        public String getText() {
            return text;
        }

        public void setText(String text) {
            this.text = text;
        }
    };

    public Tags getTags() {
        return tags;
    }
    public void setTags(Tags tags) {
        this.tags = tags;
    }
};
//Getters & Setters ...
我已经能够将更简单的对象转换成POJO,但是这个列表让我很为难


感谢您的帮助。谢谢

我认为您的问题在于您的类定义。似乎您希望
标记
类包含来自Json的原始文本,Json是一个数组。我要做的是:

protected Entities entities;
@JsonIgnoreProperties(ignoreUnknown = true)
protected class Entities {
    public Entities() {}
    @JsonDeserialize(contentAs=Tag.class)
    protected List<Tag> tags;

    @JsonIgnoreProperties(ignoreUnknown = true)
    protected class Tag {
        public Tag() {}

        protected String text;

        public String getText() {
            return text;
        }

        public void setText(String text) {
            this.text = text;
        }
    };

    public Tags getTags() {
        return tags;
    }
    public void setTags(Tags tags) {
        this.tags = tags;
    }
};
受保护的实体;
@JsonIgnoreProperties(ignoreUnknown=true)
受保护类实体{
公共实体(){}
@JsonDeserialize(contentAs=Tag.class)
受保护的列表标签;
@JsonIgnoreProperties(ignoreUnknown=true)
受保护类标记{
公共标记(){}
受保护的字符串文本;
公共字符串getText(){
返回文本;
}
公共void setText(字符串文本){
this.text=文本;
}
};
公共标记getTags(){
返回标签;
}
公共无效集合标记(标记){
this.tags=标签;
}
};

在字段标记上,我使用一个列表来表示Json数组,并告诉Jackson将该列表的内容反序列化为标记类。这是必需的,因为Jackson没有泛型声明的运行时信息。对于索引,您也可以做同样的事情,即使用JsonDeserialize注释创建一个字段
列表索引。

我认为您的问题在于您的类定义。似乎您希望
标记
类包含来自Json的原始文本,Json是一个数组。我要做的是:

protected Entities entities;
@JsonIgnoreProperties(ignoreUnknown = true)
protected class Entities {
    public Entities() {}
    @JsonDeserialize(contentAs=Tag.class)
    protected List<Tag> tags;

    @JsonIgnoreProperties(ignoreUnknown = true)
    protected class Tag {
        public Tag() {}

        protected String text;

        public String getText() {
            return text;
        }

        public void setText(String text) {
            this.text = text;
        }
    };

    public Tags getTags() {
        return tags;
    }
    public void setTags(Tags tags) {
        this.tags = tags;
    }
};
受保护的实体;
@JsonIgnoreProperties(ignoreUnknown=true)
受保护类实体{
公共实体(){}
@JsonDeserialize(contentAs=Tag.class)
受保护的列表标签;
@JsonIgnoreProperties(ignoreUnknown=true)
受保护类标记{
公共标记(){}
受保护的字符串文本;
公共字符串getText(){
返回文本;
}
公共void setText(字符串文本){
this.text=文本;
}
};
公共标记getTags(){
返回标签;
}
公共无效集合标记(标记){
this.tags=标签;
}
};

在字段标记上,我使用一个列表来表示Json数组,并告诉Jackson将该列表的内容反序列化为标记类。这是必需的,因为Jackson没有泛型声明的运行时信息。对于索引,您也可以做同样的事情,即使用JsonDeserialize注释创建一个字段<代码>列表索引。

此外,我必须使这两个类都是静态的,以使其正常工作。让我这么想的是:看起来不错。请注意,其中一个注释(
@jsondesialize(contentAs=)
)是多余的:不会造成伤害,但不需要(因为字段签名包含所有信息)。真的吗?我觉得我需要这些定义是因为运行时类型擦除。。。那好吧,我马上就去拿斧头!此外,我必须使这两个类都是静态的,才能让它工作。让我这么想的是:看起来不错。请注意,其中一个注释(
@jsondesialize(contentAs=)
)是多余的:不会造成伤害,但不需要(因为字段签名包含所有信息)。真的吗?我觉得我需要这些定义是因为运行时类型擦除。。。那好吧,我马上就去拿斧头!