81,090
社区成员
发帖
与我相关
我的任务
分享
public class A{
private ArrayList<B> aaa;
public ArrayList<B> getAaa(){
return aaa;
}
public void setAaa(ArrayList<B> aaa){
this.aaa=aaa;
}
}
Bean B设计:
public class B{
private String str;
private Integer ind;
// 标记使Jackson使用构造函数建立B对象而不是setter
@JsonCreator
public B(ArrayList<Object> bArr){
if(bArr.get(0) instanceof String){
this.str=(String)bArr.get(0);
}
if(bArr.get(1) instanceof Integer){
this.ind=(Integer)bArr.get(1);
}
}
public String getStr(){
return this.str;
}
public void setStr(String str){
this.str=str;
}
public Integer getInd(){
return this.ind;
}
public void setInd(Integer ind){
this.ind=ind;
}
// 标记使Jackson使用该方法获得对象用于串行化的值
// 标记后,Jackson忽略以上getter
@JsonValue(value=true)
public ArrayList<Object> getB(){
return new ArrayList<Object>(){
{
add(getStr());
add(getInd());
}
};
}
}
主程序片段:
// 读入解析
ObjectMapper objMapper=new ObjectMapper();
ArrayList<A> as=objMapper.readValue(jsonString,new TypeReference<ArrayList<A>>(){});
// 输出
objMapper.setSerializationInclusion(JsonSerialize.Inclusion.NON_NULL);
ObjectWriter ow=objectMapper.writer(new DefaultPrettyPrinter());
String outJsonString=ow.writeValueAsString(as);
Jackson的Annotation很多地方都没有提及,用Annotation配合Data-Bind解析Json很方便。