jackson--对象与json之间的转换

//1.由于返回XML对象带有大量标签内容,逐渐被json代替,json格式是text/html
需要Jackson包支持:
public class TestJackson {

    /**测试将一根对象转换为json*/
    @Test
    public void test01() {
        StringWriter out=new StringWriter();
        JsonGenerator jg=null;
        try {
            //1.创建JsonFactory
            JsonFactory jf=new JsonFactory();
            //2.创建JsonGenerator
            jg=jf.createGenerator(out);
                //使用一种相对漂亮的格式输出
            jg.useDefaultPrettyPrinter();
            //3.创建ObjectMapper,通过ObjectMapper来写对象
            ObjectMapper mapper=new ObjectMapper();
            
            User u=new User(1,"劳动法","123",new Group(1,"财务处"));
            mapper.writeValue(jg, u);
            System.out.println(out.toString());
        } catch (IOException e) {
            e.printStackTrace();
        } finally{
            try {
                if(jg!=null) jg.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    
    /**测试将List转换为json*/
    @Test
    public void test02() {
        StringWriter out=new StringWriter();
        JsonGenerator jg=null;
        try {
            //1.创建JsonFactory
            JsonFactory jf=new JsonFactory();
            //2.创建JsonGenerator
            jg=jf.createGenerator(out);
                //使用一种相对漂亮的格式输出
            //jg.useDefaultPrettyPrinter();
            //3.创建ObjectMapper,通过ObjectMapper来写对象
            ObjectMapper mapper=new ObjectMapper();
            List<User> us=new ArrayList<User>();
            User u=new User(1,"劳动法","123",new Group(1,"财务处"));
            us.add(u);
            u=new User(2,"猪八戒","123",new Group(1,"财务处"));
            us.add(u);
            u=new User(3,"张学友","123",new Group(1,"财务处"));
            us.add(u);
            mapper.writeValue(jg, us);
            System.out.println(out.toString());
        } catch (IOException e) {
            e.printStackTrace();
        } finally{
            try {
                if(jg!=null) jg.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    /**测试将json字符串转换为对象*/
    @Test
    public void test03(){
        try {
            String json="{\"id\":1,\"username\":\"杂货\",\"password\":\"123\",\"group\":{\"id\":1,\"name\":\"测试处\"}}";
            ObjectMapper mapper=new ObjectMapper();
            User u=mapper.readValue(json,User.class);
            System.out.println(u.getId()+","+u.getUsername()+","+u.getPassword()+","+u.getGroup().getName());
        } catch (JsonParseException e) {
            e.printStackTrace();
        } catch (JsonMappingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        
    }
    
    /**测试将json字符串转换为List*/
    @Test
    public void test04(){
        try {
            String json="[{\"id\":1,\"username\":\"劳动法\",\"password\":\"123\",\"group\":{\"id\":1,\"name\":\"财务处\"}},{\"id\":2,\"username\":\"猪八戒\",\"password\":\"123\",\"group\":{\"id\":1,\"name\":\"财务处\"}},{\"id\":3,\"username\":\"张学友\",\"password\":\"123\",\"group\":{\"id\":1,\"name\":\"财务处\"}}]";
            ObjectMapper mapper=new ObjectMapper();
    //把json转换为List的时候,不能直接存储Bean对象,list存的是Map对象
            /*List<User> us=mapper.readValue(json,List.class);
            System.out.println(us.size());
            for(User u:us){
                System.out.println(u.getUsername());
            }*/
            /*所以json都是通过map来存储的,不会直接存储bean,但在开发中,
             * 把字符串转换为对象,一般只会对单个对象转换,很少会用到对对象的完全转换*/
            List<Map<String,Object>> us=mapper.readValue(json,List.class);
            for(Map<String,Object> m:us){
                System.out.println(m.get("username"));
                System.out.println(m.get("group"));
            }
        } catch (JsonParseException e) {
            e.printStackTrace();
        } catch (JsonMappingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    /**Jackson提供了一种基于节点的读取方法*/
    @Test
    public void test05(){
        try {
            String json="[{\"id\":1,\"username\":\"劳动法\",\"password\":\"123\",\"group\":{\"id\":1,\"name\":\"财务处\"}},{\"id\":2,\"username\":\"猪八戒\",\"password\":\"123\",\"group\":{\"id\":1,\"name\":\"财务处\"}},{\"id\":3,\"username\":\"张学友\",\"password\":\"123\",\"group\":{\"id\":1,\"name\":\"财务处\"}}]";
            ObjectMapper mapper=new ObjectMapper();
            JsonNode node=mapper.readTree(json);
            //判断这个节点是否是数组
            System.out.println(node.isArray());
            System.out.println(node.size());
            System.out.println(node.get(0).get("username"));
            System.out.println(node.get(0).get("group").get("name"));
        } catch (JsonParseException e) {
            e.printStackTrace();
        } catch (JsonMappingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    /**测试JacksonUtil将List转换为json*/
    @Test
    public void test02_1() {
        List<User> us=new ArrayList<User>();
        User u=new User(1,"劳动法","123",new Group(1,"财务处"));
        us.add(u);
        u=new User(2,"猪八戒","123",new Group(1,"财务处"));
        us.add(u);
        u=new User(3,"张学友","123",new Group(1,"财务处"));
        us.add(u);
        System.out.println(JacksonUtil.getInstance().obj2json(us));
    }

}
////////////////////////////////////////////////////
public class JacksonUtil {

    private static JacksonUtil ju;
    private static JsonFactory jf;
    private static ObjectMapper mapper;
    private JacksonUtil(){}
    public static JacksonUtil getInstance(){
        if(ju==null) ju=new JacksonUtil();
        return ju;
    }
    
    public static ObjectMapper getMapper(){
        if(mapper==null){
            mapper=new ObjectMapper();
        }
        return mapper;
    }
    
    public static JsonFactory getFactory(){
        if(jf==null) jf=new JsonFactory();
        return jf;
    }
    
    public String obj2json(Object obj){
        JsonGenerator jg=null;
        try {
            jf=getFactory();
            mapper=getMapper();
            StringWriter out=new StringWriter(); 
            jg=jf.createGenerator(out);
            mapper.writeValue(jg,obj);
            return out.toString();
        } catch (IOException e) {
            e.printStackTrace();
        } finally{
            try {
                if(jg!=null) jg.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }
    
    public Object json2obj(String json,Class<?> clz){
        try {
            mapper=getMapper();
            return mapper.readValue(json,clz);
        } catch (JsonParseException e) {
            e.printStackTrace();
        } catch (JsonMappingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
}


你可能感兴趣的:(jackson--对象与json之间的转换)