重学JavaWeb(6)JSON与Java对象的互转

1. JSON与Java对象的互转

1. Java对象转换成Json字符串
(1)使用步骤

1. 导入jackson相关的jar包
2. 创建jackson核心对象:ObjectMapper
3. 调用相关方法
	1. writeValueAsString(obj):将对象转化为json字符串
	2. writeValue(参数1,obj):
		参数1:
			Flie:将obj对象转换为json字符串,并保存到指定的文件中
			Writer:将obj对象转换为json字符串,并写入字符输出流中
			OutputStream:将obj对象转换为json字符串,并写入字节输出流中

(2)代码示例①

public class MyTest01 {
    public static void main(String[] args) throws JsonProcessingException {
        User user = new User();
        user.setUsername("张三");
        user.setPassword("123456");

        //将java对象转化为json字符串
        ObjectMapper objectMapper = new ObjectMapper();
        String s = objectMapper.writeValueAsString(user);
        System.out.println(s);   //{"username":"张三","password":"123456"}
    }
}

===============================================================================================

public class MyTest02 {
    public static void main(String[] args) throws IOException {
        User user1 = new User("张三", "12345");
        User user2 = new User("李四", "12345");
        User user3 = new User("王五", "12345");
        User user4 = new User("赵六", "12345");

        ArrayList<User> users = new ArrayList<>();
        users.add(user1);
        users.add(user2);
        users.add(user3);
        users.add(user4);

        ObjectMapper objectMapper = new ObjectMapper();
        String s = objectMapper.writeValueAsString(users);
        System.out.println(s);
        /**
         * [
         *  {
         *      "username":"张三",
         *      "password":"12345"
         *  },
         *  {
         *      "username":"李四",
         *      "password":"12345"
         *  },
         *  {
         *      "username":"王五",
         *      "password":"12345"
         *  },
         *  {
         *      "username":"赵六",
         *      "password":"12345"
         *  }
         * ]
         */

        objectMapper.writeValue(new FileWriter("myJson.json"),users);
    }
}

===============================================================================================

public class User {
    private String username;
    private String password;

    public User() {
    }

    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

(3)代码示例②

public class MyTest01 {
    public static void main(String[] args) throws JsonProcessingException {
        Car car = new Car("宝马", 200000, "红色");
        ArrayList<String> list = new ArrayList<>();
        list.add("111");
        list.add("222");
        list.add("333");
        People people = new People("王五", 55, 20000, car, list);

        ObjectMapper objectMapper = new ObjectMapper();
        String string = objectMapper.writeValueAsString(people);
        System.out.println(string);
        /**
         * {
         *  "name":"王五",
         *  "age":55,
         *  "salary":20000,
         *  "car":{
         *      "carName":"宝马",
         *      "carPrice":200000.0,
         *      "color":"红色"},
         *  "list":["111","222","333"]
         *  }
         */
    }
}

===============================================================================================

public class People {
    private String name;
    private int age;
    private int salary;
    private Car car;
    private List<String> list;

    public People() {
    }

    public People(String name, int age, int salary, Car car, List<String> list) {
        this.name = name;
        this.age = age;
        this.salary = salary;
        this.car = car;
        this.list = list;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getSalary() {
        return salary;
    }

    public void setSalary(int salary) {
        this.salary = salary;
    }

    public Car getCar() {
        return car;
    }

    public void setCar(Car car) {
        this.car = car;
    }

    public List<String> getList() {
        return list;
    }

    public void setList(List<String> list) {
        this.list = list;
    }

    @Override
    public String toString() {
        return "People{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", salary=" + salary +
                ", car=" + car +
                ", list=" + list +
                '}';
    }
}

===============================================================================================

public class Car {
    private String carName;
    private double carPrice;
    private String color;

    public Car() {
    }

    public Car(String carName, double carPrice, String color) {
        this.carName = carName;
        this.carPrice = carPrice;
        this.color = color;
    }

    public String getCarName() {
        return carName;
    }

    public void setCarName(String carName) {
        this.carName = carName;
    }

    public double getCarPrice() {
        return carPrice;
    }

    public void setCarPrice(double carPrice) {
        this.carPrice = carPrice;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    @Override
    public String toString() {
        return "Car{" +
                "carName='" + carName + '\'' +
                ", carPrice=" + carPrice +
                ", color='" + color + '\'' +
                '}';
    }
}

(4)代码示例③

public class MyTest02 {
    public static void main(String[] args) throws IOException {
        User u1 = new User("张三", "12345");
        User u2 = new User("李四", "12345");
        User u3 = new User("王五", "12345");
        User u4 = new User("赵六", "12345");
        HashMap<String, User> map = new HashMap<>();
        map.put("user1",u1);
        map.put("user2",u2);
        map.put("user3",u3);
        map.put("user4",u4);

        ObjectMapper objectMapper = new ObjectMapper();
        String string = objectMapper.writeValueAsString(map);
        System.out.println(string);
        /**
         * {
         *   "user1":{
         *      "username":"张三",
         *      "password":"12345"
         *   },
         *   "user2":{
         *      "username":"李四",
         *      "password":"12345"
         *   },
         *   "user3":{
         *      "username":"王五",
         *      "password":"12345"
         *   },
         *   "user4":{
         *      "username":"赵六",
         *      "password":"12345"}
         * }
         */

        //将json数据写入到文件中
        objectMapper.writeValue(new File("myJson02.json"),map);
    }
}

===============================================================================================

public class User {
    private String username;
    private String password;

    public User() {
    }

    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

(5)注解的使用

1. @JsonIgnore:忽略此属性,不转换成json
2. @JsonFormat:格式化此属性
public class MyTest01 {
    public static void main(String[] args) throws JsonProcessingException {
        Student student = new Student("张三", 23, '男', new Date());
        ObjectMapper objectMapper = new ObjectMapper();
        String s = objectMapper.writeValueAsString(student);
        System.out.println(s);
        /**
         * {
         *   "name":"张三",
         *   "age":23,
         *   "birthday":"2020-10-26 16:18:07"
         * }
         */
    }
}

===============================================================================================

public class Student {
    private String name;
    private int age;
    @JsonIgnore  //忽略此属性,不转换成json
    private char sex;
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")  //格式化此属性
    private Date birthday;

    public Student() {
    }

    public Student(String name, int age, char sex, Date birthday) {
        this.name = name;
        this.age = age;
        this.sex = sex;
        this.birthday = birthday;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", sex=" + sex +
                ", birthday=" + birthday +
                '}';
    }
}

2. Json字符串转换成Java对象
(1)使用步骤

1. 导入jackson相关的jar包
2. 创建jackson核心对象:ObjectMapper
3. 调用objectMapper有关的方法进行转化
	1. readValue(json字符串数据,Class)

(2)代码示例①

public class MyTest01 {
    public static void main(String[] args) throws IOException {
        String jsonStr = "{\"username\":\"张三\",\"password\":\"123456\"}";
        ObjectMapper objectMapper = new ObjectMapper();
        People people = objectMapper.readValue(jsonStr, People.class);
        System.out.println(people);  //People{username='张三', password='123456'}
    }
}

===============================================================================================

public class People {
    private String username;
    private String password;

    public People() {
    }

    public People(String username, String password) {
        this.username = username;
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "People{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

(3)代码示例②

public class MyTest01 {
    public static void main(String[] args) throws IOException {
        String jsonStr ="{\"username\":\"张三\",\"password\":\"123456\",\"list\":[100,200,300,400],\"obj\":{\"name\":\"哈哈\",\"num\":100}}";
        ObjectMapper objectMapper = new ObjectMapper();
        User user = objectMapper.readValue(jsonStr, User.class);

        System.out.println(user.getUsername());  //张三
        System.out.println(user.getList());  //[100, 200, 300, 400]
        System.out.println(user.getObj());    //Obj{name='哈哈', num=100}
        System.out.println(user.getObj().getName());   //哈哈
    }
}

===============================================================================================

public class User {
    private String username;
    private String password;
    private List<Integer> list;
    private Obj obj;

    public User() {
    }

    public User(String username, String password, List<Integer> list, Obj obj) {
        this.username = username;
        this.password = password;
        this.list = list;
        this.obj = obj;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public List<Integer> getList() {
        return list;
    }

    public void setList(List<Integer> list) {
        this.list = list;
    }

    public Obj getObj() {
        return obj;
    }

    public void setObj(Obj obj) {
        this.obj = obj;
    }

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", list=" + list +
                ", obj=" + obj +
                '}';
    }
}

===============================================================================================

public class Obj {
    private String name;
    private int num;

    public Obj() {
    }

    public Obj(String name, int num) {
        this.name = name;
        this.num = num;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    @Override
    public String toString() {
        return "Obj{" +
                "name='" + name + '\'' +
                ", num=" + num +
                '}';
    }
}

(3)使用GsonFormat插件自动生成

public class MyTest01 {
    public static void main(String[] args) throws IOException {
        String str = "{\"data\":{\"yesterday\":{\"date\":\"23日星期五\",\"high\":\"高温 17℃\",\"fx\":\"东南风\",\"low\":\"低温 5℃\",\"fl\":\"<![CDATA[2级]]>\",\"type\":\"晴\"},\"city\":\"商洛\",\"forecast\":[{\"date\":\"24日星期六\",\"high\":\"高温 16℃\",\"fengli\":\"<![CDATA[2级]]>\",\"low\":\"低温 4℃\",\"fengxiang\":\"东南风\",\"type\":\"霾\"},{\"date\":\"25日星期天\",\"high\":\"高温 19℃\",\"fengli\":\"<![CDATA[1级]]>\",\"low\":\"低温 8℃\",\"fengxiang\":\"东南风\",\"type\":\"霾\"},{\"date\":\"26日星期一\",\"high\":\"高温 20℃\",\"fengli\":\"<![CDATA[2级]]>\",\"low\":\"低温 7℃\",\"fengxiang\":\"西北风\",\"type\":\"多云\"},{\"date\":\"27日星期二\",\"high\":\"高温 18℃\",\"fengli\":\"<![CDATA[1级]]>\",\"low\":\"低温 7℃\",\"fengxiang\":\"北风\",\"type\":\"雾\"},{\"date\":\"28日星期三\",\"high\":\"高温 14℃\",\"fengli\":\"<![CDATA[1级]]>\",\"low\":\"低温 4℃\",\"fengxiang\":\"东风\",\"type\":\"小雨\"}],\"ganmao\":\"感冒易发期,外出请适当调整衣物,注意补充水分。\",\"wendu\":\"12\"},\"status\":1000,\"desc\":\"OK\"}";

        ObjectMapper objectMapper = new ObjectMapper();
        Weather weather = objectMapper.readValue(str, Weather.class);
        System.out.println(weather.getStatus());   //1000
        System.out.println(weather.getDesc());   //OK
    }
}

===============================================================================================

@JsonIgnoreProperties(ignoreUnknown = true)
public class Weather {

    /**
     * data : {"yesterday":{"date":"25日星期日","high":"高温 20℃","fx":"北风","low":"低温 11℃","fl":"<![CDATA[1级]]>","type":"多云"},"city":"商洛","forecast":[{"date":"26日星期一","high":"高温 20℃","fengli":"<![CDATA[2级]]>","low":"低温 10℃","fengxiang":"西北风","type":"多云"},{"date":"27日星期二","high":"高温 14℃","fengli":"<![CDATA[1级]]>","low":"低温 9℃","fengxiang":"西北风","type":"小雨"},{"date":"28日星期三","high":"高温 12℃","fengli":"<![CDATA[1级]]>","low":"低温 5℃","fengxiang":"东南风","type":"小雨"},{"date":"29日星期四","high":"高温 16℃","fengli":"<![CDATA[1级]]>","low":"低温 6℃","fengxiang":"东南风","type":"霾"},{"date":"30日星期五","high":"高温 15℃","fengli":"<![CDATA[2级]]>","low":"低温 9℃","fengxiang":"东南风","type":"雾"}],"ganmao":"感冒易发期,外出请适当调整衣物,注意补充水分。","wendu":"13"}
     * status : 1000
     * desc : OK
     */

    private DataBean data;
    private int status;
    private String desc;

    public DataBean getData() {
        return data;
    }

    public void setData(DataBean data) {
        this.data = data;
    }

    public int getStatus() {
        return status;
    }

    public void setStatus(int status) {
        this.status = status;
    }

    public String getDesc() {
        return desc;
    }

    public void setDesc(String desc) {
        this.desc = desc;
    }

    @JsonIgnoreProperties(ignoreUnknown = true)
    public static class DataBean {
        /**
         * yesterday : {"date":"25日星期日","high":"高温 20℃","fx":"北风","low":"低温 11℃","fl":"<![CDATA[1级]]>","type":"多云"}
         * city : 商洛
         * forecast : [{"date":"26日星期一","high":"高温 20℃","fengli":"<![CDATA[2级]]>","low":"低温 10℃","fengxiang":"西北风","type":"多云"},{"date":"27日星期二","high":"高温 14℃","fengli":"<![CDATA[1级]]>","low":"低温 9℃","fengxiang":"西北风","type":"小雨"},{"date":"28日星期三","high":"高温 12℃","fengli":"<![CDATA[1级]]>","low":"低温 5℃","fengxiang":"东南风","type":"小雨"},{"date":"29日星期四","high":"高温 16℃","fengli":"<![CDATA[1级]]>","low":"低温 6℃","fengxiang":"东南风","type":"霾"},{"date":"30日星期五","high":"高温 15℃","fengli":"<![CDATA[2级]]>","low":"低温 9℃","fengxiang":"东南风","type":"雾"}]
         * ganmao : 感冒易发期,外出请适当调整衣物,注意补充水分。
         * wendu : 13
         */

        private YesterdayBean yesterday;
        private String city;
        private String ganmao;
        private String wendu;
        private List<ForecastBean> forecast;

        public YesterdayBean getYesterday() {
            return yesterday;
        }

        public void setYesterday(YesterdayBean yesterday) {
            this.yesterday = yesterday;
        }

        public String getCity() {
            return city;
        }

        public void setCity(String city) {
            this.city = city;
        }

        public String getGanmao() {
            return ganmao;
        }

        public void setGanmao(String ganmao) {
            this.ganmao = ganmao;
        }

        public String getWendu() {
            return wendu;
        }

        public void setWendu(String wendu) {
            this.wendu = wendu;
        }

        public List<ForecastBean> getForecast() {
            return forecast;
        }

        public void setForecast(List<ForecastBean> forecast) {
            this.forecast = forecast;
        }

        @JsonIgnoreProperties(ignoreUnknown = true)
        public static class YesterdayBean {
            /**
             * date : 25日星期日
             * high : 高温 20℃
             * fx : 北风
             * low : 低温 11℃
             * fl : <![CDATA[1级]]>
             * type : 多云
             */

            private String date;
            private String high;
            private String fx;
            private String low;
            private String fl;
            private String type;

            public String getDate() {
                return date;
            }

            public void setDate(String date) {
                this.date = date;
            }

            public String getHigh() {
                return high;
            }

            public void setHigh(String high) {
                this.high = high;
            }

            public String getFx() {
                return fx;
            }

            public void setFx(String fx) {
                this.fx = fx;
            }

            public String getLow() {
                return low;
            }

            public void setLow(String low) {
                this.low = low;
            }

            public String getFl() {
                return fl;
            }

            public void setFl(String fl) {
                this.fl = fl;
            }

            public String getType() {
                return type;
            }

            public void setType(String type) {
                this.type = type;
            }
        }

        @JsonIgnoreProperties(ignoreUnknown = true)
        public static class ForecastBean {
            /**
             * date : 26日星期一
             * high : 高温 20℃
             * fengli : <![CDATA[2级]]>
             * low : 低温 10℃
             * fengxiang : 西北风
             * type : 多云
             */

            private String date;
            private String high;
            private String fengli;
            private String low;
            private String fengxiang;
            private String type;

            public String getDate() {
                return date;
            }

            public void setDate(String date) {
                this.date = date;
            }

            public String getHigh() {
                return high;
            }

            public void setHigh(String high) {
                this.high = high;
            }

            public String getFengli() {
                return fengli;
            }

            public void setFengli(String fengli) {
                this.fengli = fengli;
            }

            public String getLow() {
                return low;
            }

            public void setLow(String low) {
                this.low = low;
            }

            public String getFengxiang() {
                return fengxiang;
            }

            public void setFengxiang(String fengxiang) {
                this.fengxiang = fengxiang;
            }

            public String getType() {
                return type;
            }

            public void setType(String type) {
                this.type = type;
            }
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值