zoukankan      html  css  js  c++  java
  • json对象和java对象的相互转换方法(json-lib、jackson、fastjson、gson)

    一 使用json-lib包下的JSONObject和JSONArray转换

    代码如下:

    package com.test.test;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import com.cn.entity.User;
    
    import net.sf.json.JSONArray;
    import net.sf.json.JSONObject;
    /**
     * JSONObject和JSONArray
     * @author sun.kai
     * 2016年8月7日
     */
    public class TestJsonOne {
    
        public static void main(String[] args){
            long time1 = System.currentTimeMillis();
    //        Map<String, Object> param = new HashMap<String,Object>();
    //        param.put("id", 1);
    //        param.put("userName", "admin管理员");
    //        param.put("password", "admin123456");
    //        param.put("age", 25);
    //        JSONObject jsonObject = JSONObject.fromObject(param);
    //        System.out.println(jsonObject);
    //        JSONArray jsonArray = JSONArray.fromObject(param);
    //        System.out.println(jsonArray);
            List<User> list = new ArrayList<User>();
            User user1 = new User();
            user1.setId(1);
            user1.setUserName("admin管理员");
            user1.setPassword("admin123456");
            user1.setAge(25);
            testJsonObject(user1);
            list.add(user1);
            User user2 = new User();
            user2.setId(2);
            user2.setUserName("海角七号");
            user2.setPassword("海角七号123456");
            user2.setAge(26);
            list.add(user2);
            testJsonArray(list);
            long time2 = System.currentTimeMillis();
            System.out.println(time2-time1);
        }
        @SuppressWarnings("static-access")
        public static void testJsonObject(User user){
            System.out.println("JSONObject测试");
            /*
             * java对象转换成json对象
             */
            JSONObject jsonObject1 = JSONObject.fromObject(user);
            /*
             * json对象转成字符串
             */
            String jsonsString1 = jsonObject1.toString();
            System.out.println(jsonObject1);
            System.out.println(jsonsString1);
            
            String jsonString2 = "{"age":25,"id":1,"password":"admin123456","userName":"admin管理员"}";
            /*
             * 字符串转成json对象
             */
            JSONObject jsonObject2 = JSONObject.fromObject(jsonString2);
            /*
             * json对象转成java对象
             */
            User user2 = (User) jsonObject2.toBean(jsonObject2,User.class);
            System.out.println(user2.getUserName());
            /*
             * 获取json对象中的json对象数组
             */
            String jsonString3 = "{"abc":[{"age":25,"id":1,"password":"admin123456","userName":"admin管理员"},"
                    + "{"age":26,"id":2,"password":"海角七号123456","userName":"海角七号"}"
                    + "]}";
            //字符串转成json对象
            JSONObject jsonObject3 = JSONObject.fromObject(jsonString3);
            //获取json对象中的json对象数组
            JSONArray jsonArray = jsonObject3.getJSONArray("abc");
            System.out.println(jsonArray.toString());
        }
        @SuppressWarnings("unchecked")
        public static void testJsonArray(List<User> userList){
            System.out.println("JSONArray测试");
            /*
             * java对象列表转换为json对象数组
             */
            JSONArray jsonArray1 = JSONArray.fromObject(userList);
            /*
             * json对象数组转成字符串
             */
            String arrayString1 = jsonArray1.toString();
            System.out.println(jsonArray1);
            System.out.println(arrayString1);
            
            String arrayString2 = "[{"age":25,"id":1,"password":"admin123456","userName":"admin管理员"},{"age":26,"id":2,"password":"海角七号123456","userName":"海角七号"}]";
            /*
             * 字符串转成json对象数组
             */
            JSONArray jsonArray2 = JSONArray.fromObject(arrayString2);
            /*
             * json对象数组转成java对象
             */
            List<User> users = (List<User>) JSONArray.toCollection(jsonArray2, User.class);
            for(User user : users){
                System.out.println(user.getUserName());
            }
            /*
             * 循环json对象数组,获取json对象
             */
            for(int i = 0;i<jsonArray2.size();i++){
                JSONObject jsonObject = jsonArray2.getJSONObject(i);
                System.out.println(jsonObject);
            }
        }
    }

    User实体类代码:

    package com.cn.entity;
    
    import java.io.Serializable;
    
    public class User implements Serializable{
        private static final long serialVersionUID = -154635138564326678L;
    
        private Integer id;
    
        private String userName;
    
        private String password;
    
        private Integer age;
    
        public Integer getId() {
            return id;
        }
    
        public void setId(Integer id) {
            this.id = id;
        }
    
        public String getUserName() {
            return userName;
        }
    
        public void setUserName(String userName) {
            this.userName = userName == null ? null : userName.trim();
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password == null ? null : password.trim();
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    }

    执行后的结果:

    JSONObject测试
    {"age":25,"id":1,"password":"admin123456","userName":"admin管理员"}
    {"age":25,"id":1,"password":"admin123456","userName":"admin管理员"}
    admin管理员
    [{"age":25,"id":1,"password":"admin123456","userName":"admin管理员"},{"age":26,"id":2,"password":"海角七号123456","userName":"海角七号"}]
    JSONArray测试
    [{"age":25,"id":1,"password":"admin123456","userName":"admin管理员"},{"age":26,"id":2,"password":"海角七号123456","userName":"海角七号"}]
    [{"age":25,"id":1,"password":"admin123456","userName":"admin管理员"},{"age":26,"id":2,"password":"海角七号123456","userName":"海角七号"}]
    admin管理员
    海角七号
    {"age":25,"id":1,"password":"admin123456","userName":"admin管理员"}
    {"age":26,"id":2,"password":"海角七号123456","userName":"海角七号"}
    686

    二 使用jackson-databind包下的ObjectMapper

    代码如下:

    package com.test.test;
    
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    
    import com.cn.entity.User;
    import com.fasterxml.jackson.core.JsonProcessingException;
    import com.fasterxml.jackson.databind.ObjectMapper;
    /**
     * jackson是spring mvc内置的json转换工具
     * @author sun.kai
     * 2016年8月7日
     */
    public class TestJsonTwo {
        public static void main(String[] args) throws JsonProcessingException{
            long time1 = System.currentTimeMillis();
            List<User> users = new ArrayList<User>();
            User user1 = new User();
            user1.setId(1);
            user1.setUserName("admin管理员");
            user1.setPassword("admin123456");
            user1.setAge(25);
            users.add(user1);
            User user2 = new User();
            user2.setId(2);
            user2.setUserName("海角七号");
            user2.setPassword("海角七号123456");
            user2.setAge(26);
            users.add(user2);
            try {
                testObjectMapper(users);
            } catch (IOException e) {
                e.printStackTrace();
            }
            long time2 = System.currentTimeMillis();
            System.out.println(time2-time1);
        }
        
        public static void testObjectMapper(List<User> users) throws IOException{
            ObjectMapper mapper = new ObjectMapper();
            /*
             * java对象是一个集合
             * 转成的字符串是json对象数组
             */
            String mapperString1 = mapper.writeValueAsString(users);
            System.out.println(mapperString1);
            /*
             * java对象不是一个集合
             * 转成json对象字符串
             */
            String mapperString2 = mapper.writeValueAsString(users.get(0));
            System.out.println(mapperString2);
            /*
             * json对象数组字符串转java对象集合
             */
            String jsonString1 = "[{"age":25,"id":1,"password":"admin123456","userName":"admin管理员"},{"age":26,"id":2,"password":"海角七号123456","userName":"海角七号"}]";
            User[] userArray = mapper.readValue(jsonString1, User[].class);
            List<User> userList = Arrays.asList(userArray);
            for (User user : userList) {
                System.out.println(user.getUserName());
            }
            /*
             * json对象字符串转java对象
             */
            String jsonString2 = "{"age":25,"id":1,"password":"admin123456","userName":"admin管理员"}";
            User user = mapper.readValue(jsonString2, User.class);
            System.out.println(user.getUserName());
        }
    }

    执行后的结果:

    [{"id":1,"userName":"admin管理员","password":"admin123456","age":25},{"id":2,"userName":"海角七号","password":"海角七号123456","age":26}]
    {"id":1,"userName":"admin管理员","password":"admin123456","age":25}
    admin管理员
    海角七号
    admin管理员
    784

    三 使用fastjson

    代码如下:

    package com.test.test;
    import com.cn.entity.User;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
    
    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.TypeReference;
    /**
     * fastjson是阿里做的国有开源Java工具包
     * @author sun.kai
     * 2016年8月7日
     */
    public class TestJsonThree {
        
        public static void main(String[] args){
            long time1 = System.currentTimeMillis();
            List<User> users = new ArrayList<User>();
            User user1 = new User();
            user1.setId(1);
            user1.setUserName("admin管理员");
            user1.setPassword("admin123456");
            user1.setAge(25);
            users.add(user1);
            User user2 = new User();
            user2.setId(2);
            user2.setUserName("海角七号");
            user2.setPassword("海角七号123456");
            user2.setAge(26);
            users.add(user2);
            testFastjson(users);
            long time2 = System.currentTimeMillis();
            System.out.println(time2-time1);
        }
        
        @SuppressWarnings("unchecked")
        public static void testFastjson(List<User> users){
            /*
             * java对象是一个集合
             * 转成的字符串是json对象数组
             */
            String fastjsonString1 = JSON.toJSONString(users);
            System.out.println(fastjsonString1);
            /*
             * java对象不是一个集合
             * 转成json对象字符串
             */
            String fastjsonString2 = JSON.toJSONString(users.get(0));
            System.out.println(fastjsonString2);
            /*
             * json对象数组字符串转java对象集合
             */
            String jsonString1 = "[{"age":25,"id":1,"password":"admin123456","userName":"admin管理员"},{"age":26,"id":2,"password":"海角七号123456","userName":"海角七号"}]";
            List<User> userList = JSON.parseArray(jsonString1, User.class);
            for (User user : userList) {
                System.out.println(user.getUserName());
            }
            /*
             * json对象数组字符串转Map集合
             */
            List<Map<String, Object>> maps = JSON.parseObject(jsonString1,new TypeReference<List<Map<String,Object>>>(){});
            System.out.println(maps);
            for (Map<String, Object> map : maps) {
                System.out.println(map.get("userName"));
            }
            /*
             * json对象字符串转java对象
             */
            String jsonString2 = "{"age":25,"id":1,"password":"admin123456","userName":"admin管理员"}";
            User user = JSON.parseObject(jsonString2, User.class);
            System.out.println(user.getUserName());
            /*
             * json对象字符串转Map
             */
            Map<String, Object> map = JSON.parseObject(jsonString2, Map.class);
            System.out.println(map);
            System.out.println(map.get("userName"));
        }
    }

    执行结果:

    [{"age":25,"id":1,"password":"admin123456","userName":"admin管理员"},{"age":26,"id":2,"password":"海角七号123456","userName":"海角七号"}]
    {"age":25,"id":1,"password":"admin123456","userName":"admin管理员"}
    admin管理员
    海角七号
    [{id=1, age=25, userName=admin管理员, password=admin123456}, {id=2, age=26, userName=海角七号, password=海角七号123456}]
    admin管理员
    海角七号
    admin管理员
    {id=1, age=25, userName=admin管理员, password=admin123456}
    admin管理员
    338

    四 使用Google的Gson

    代码如下:

    package com.test.test;
    import com.cn.entity.User;
    import com.google.gson.Gson;
    import com.google.gson.reflect.TypeToken;
    
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
    /**
     * google的gson
     * https://mvnrepository.com/artifact/com.google.code.gson/gson
     * @author sun.kai
     * 2016年8月7日
     */
    public class TestJsonFour {
        public static void main(String[] args){
            long time1 = System.currentTimeMillis();
            List<User> users = new ArrayList<User>();
            User user1 = new User();
            user1.setId(1);
            user1.setUserName("admin管理员");
            user1.setPassword("admin123456");
            user1.setAge(25);
            users.add(user1);
            User user2 = new User();
            user2.setId(2);
            user2.setUserName("海角七号");
            user2.setPassword("海角七号123456");
            user2.setAge(26);
            users.add(user2);
            testGson(users);
            long time2 = System.currentTimeMillis();
            System.out.println(time2-time1);
        }
        
        @SuppressWarnings("unchecked")
        public static void testGson(List<User> users){
            /*
             * 创建Gson对象
             */
            Gson gson = new Gson();
            /*
             * 获得泛型参数的类型
             */
            java.lang.reflect.Type type = new TypeToken<List<User>>() {}.getType();
            /*
             * java对象是一个集合
             * 转成的字符串是json对象数组
             */
            String gsonString1 = gson.toJson(users);
            System.out.println(gsonString1);
            /*
             * java对象不是一个集合
             * 转成json对象字符串
             */
            String gsonString2 = gson.toJson(users.get(0));
            System.out.println(gsonString2);
            /*
             * json对象数组字符串转java对象集合
             */
            String jsonString1 = "[{"age":25,"id":1,"password":"admin123456","userName":"admin管理员"},{"age":26,"id":2,"password":"海角七号123456","userName":"海角七号"}]";
            List<User> userList = gson.fromJson(jsonString1, type);
            for (User user : userList) {
                System.out.println(user.getUserName());
            }
            /*
             * json对象数组字符串转Map集合
             */
            List<Map<String, Object>> maps = gson.fromJson(jsonString1,new TypeToken<List<Map<String, Object>>>() {}.getType());
            System.out.println(maps);
            for (Map<String, Object> map : maps) {
                System.out.println(map.get("userName"));
            }
            /*
             * json对象字符串转java对象
             */
            String jsonString2 = "{"age":25,"id":1,"password":"admin123456","userName":"admin管理员"}";
            User user = gson.fromJson(jsonString2, User.class);
            System.out.println(user.getUserName());
            /*
             * json对象字符串转Map
             */
            Map<String, Object> map = gson.fromJson(jsonString2, Map.class);
            System.out.println(map);
            System.out.println(map.get("userName"));
        }
    }

    执行结果:

    [{"id":1,"userName":"admin管理员","password":"admin123456","age":25},{"id":2,"userName":"海角七号","password":"海角七号123456","age":26}]
    {"id":1,"userName":"admin管理员","password":"admin123456","age":25}
    admin管理员
    海角七号
    [{age=25.0, id=1.0, password=admin123456, userName=admin管理员}, {age=26.0, id=2.0, password=海角七号123456, userName=海角七号}]
    admin管理员
    海角七号
    admin管理员
    {age=25.0, id=1.0, password=admin123456, userName=admin管理员}
    admin管理员
    336
  • 相关阅读:
    转载的,讲解java.util的集合类
    LinkedList
    数据结构
    随笔
    spring boot初步尝试
    spring boot
    java8 新特性
    volatile 续
    java 线程基础学习
    java 基础
  • 原文地址:https://www.cnblogs.com/aqsunkai/p/6690592.html
Copyright © 2011-2022 走看看