分享

关于Jackson2.x中com.fasterxml.jackson包的用法

 yetao_study 2013-11-07
Jackson应该是目前最好的json解析工具了,之前一直用的是org.codehaus.jackson包中的工具,使用的
包是jackson-all-1.9.11.jar。

最近发现Jackson升级到2.2.3了,出于好奇,准备下载来测试一下,于是在官网下了一个jackson-core-2.2.3
的jar包,发现使用的包名都变成了com.fasterxml.jackson,而且没有找到ObjectMapper对象,以为是整个
设计全变了,看了一下jackson-core的文档,发现有个com.fasterxml.jackson.core.JsonFactory对象,
于是用其来构造com.fasterxml.jackson.core.JsonGenerator,调用writeObject(pojo)方法时
报pojo不是ObjectCodec对象的错误……

最后经过一番检查才发现是包没有导全的原因,Jackson2.2.3是有jackson-core-2.2.3、jackson-annotations-2.2.3、
jackson-databind-2.2.3三个包的,新的ObjectMapper对象在jackson-databind-2.2.3包中,具体使用实例如下。


        =====文件名:JacksonCoreTest.java=====

import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;

/**
 *
 * @author yetao
 */
public class JacksonCoreTest {
    public static void main(String[] args) throws IOException{
        ArrayList<String> lists = new ArrayList();
        lists.add("testlist01");
        lists.add("testlist02");
        HashMap<String,String> maps = new HashMap();
        maps.put("mapkey01","mapvalue01");
        maps.put("mapkey02","mapvalue02");
        User user1 = new User();
        user1.setListinfo(lists);
        user1.setMapinfo(maps);
        user1.setNumber(100);
        user1.setUid(10);
        user1.setUname("yetao");
        user1.setUpwd("666");
        ObjectMapper mapper = new ObjectMapper();
        // 仅输出一行json字符串
        mapper.writeValue(System.out, user1);
        // 将字符串美化成多行
        System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(user1));
    }
}

        =====文件名:User.java=====

import java.util.ArrayList;
import java.util.HashMap;

public class User {

    private int uid;
    private String uname;
    private String upwd;
    private double number;
    private ArrayList<String> listinfo;
    private HashMap<String,String> mapinfo;

    @Override
    public String toString(){
        StringBuilder sb = new StringBuilder();
        sb.append("uid:").append(uid).append("\n");
        sb.append("uname:").append(uname).append("\n");
        sb.append("upwd:").append(upwd).append("\n");
        sb.append("number:").append(number).append("\n");
        sb.append("listinfo:").append("[");
        for(String info:listinfo){
            sb.append(info).append(";");
        }
        sb.append("]\n");
        sb.append("mapinfo:").append("[");
        for(String key:mapinfo.keySet()){
            sb.append(key).append(":").append(mapinfo.get(key)).append(";");
        }
        sb.append("]\n");
        return sb.toString();
    }

    public double getNumber() {
        return number;
    }

    public void setNumber(double number) {
        this.number = number;
    }

    public int getUid() {
        return uid;
    }

    public void setUid(int uid) {
        this.uid = uid;
    }

    public String getUname() {
        return uname;
    }

    public void setUname(String uname) {
        this.uname = uname;
    }

    public String getUpwd() {
        return upwd;
    }

    public void setUpwd(String upwd) {
        this.upwd = upwd;
    }

    /**
     * @return the listinfo
     */
    public ArrayList<String> getListinfo() {
        return listinfo;
    }

    /**
     * @param listinfo the listinfo to set
     */
    public void setListinfo(ArrayList<String> listinfo) {
        this.listinfo = listinfo;
    }

    /**
     * @return the mapinfo
     */
    public HashMap<String,String> getMapinfo() {
        return mapinfo;
    }

    /**
     * @param mapinfo the mapinfo to set
     */
    public void setMapinfo(HashMap<String,String> mapinfo) {
        this.mapinfo = mapinfo;
    }
}

美化成多行后的输出如下:
{
  "uid" : 10,
  "uname" : "yetao",
  "upwd" : "666",
  "number" : 100.0,
  "listinfo" : [ "testlist01", "testlist02" ],
  "mapinfo" : {
    "mapkey02" : "mapvalue02",
    "mapkey01" : "mapvalue01"
  }
}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多