我无法将这些JSON变成POJO。我正在使用杰克逊这样配置:
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();
}
}
以下是需要转换为POJO的JSON:
{
"id":"exampleID1",
"entities":{
"tags":[
{
"text":"textexample1",
"indices":[
2,
14
]
},
{
"text":"textexample2",
"indices":[
31,
36
]
},
{
"text":"textexample3",
"indices":[
37,
43
]
}
]
}
最后,这是我目前对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,但这个列表让我感到难过。
感谢任何帮助。谢谢!
答案 0 :(得分:3)
我认为您的问题与您的班级定义有关。您似乎希望Tags
类包含来自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;
}
};
在字段标签上,我使用List来表示Json数组,并告诉Jackson将该列表的内容反序列化为Tag类。这是必需的,因为Jackson没有泛型声明的运行时信息。您对索引执行相同的操作,即使用带有JsonDeserialize注释的字段List<Integer> indices
。