用Jackson解析JSON的问题

FarDawn 2013-07-08 06:18:20
现在有一个JSON字符串:{"aaa":[["bbb",1],["ccc",-1]]}

因为中间的["bbb",1]没有办法映射成Bean,所以这样的JSON字符串如何用Jackson解析?最好用Data-bind的方式解析,用JSON Tree的方式已经了解了。
...全文
147 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
FarDawn 2013-07-10
  • 打赏
  • 举报
回复
嗯,算是个好习惯,不过Jackson里已经指定会把数组解析为ArrayList了,所以可以限定更小一些。
oh_Maxy 2013-07-09
  • 打赏
  • 举报
回复
建议ArrayList声明的时候,声明为List,实例化的时候再使用ArrayList。 算是一个好的习惯吧~
FarDawn 2013-07-09
  • 打赏
  • 举报
回复
好了,已经自行解决这个问题了。现在放出可行的代码 Bean A设计:

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很方便。

81,090

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧