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;
}
}
}
}