Java 将JSON列表转换为POJO
我很难将这一点JSON放到POJO中。我使用的Jackson配置如下: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
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=)
)是多余的:不会造成伤害,但不需要(因为字段签名包含所有信息)。真的吗?我觉得我需要这些定义是因为运行时类型擦除。。。那好吧,我马上就去拿斧头!