jackson的解析性非常的棒,今天我们来学习一下jackson的用法。
jackson需要依赖三个jar包:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.9.5</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.5</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.5</version>
</dependency>
一、先来试试把对象转成json格式
public class Book {
private int id;
private String name;
private double price;
public Book() {
}
public Book(int id, String name, double price) {
super();
this.id = id;
this.name = name;
this.price = price;
}
//省略set/get方法
}
public static void main(String[] args) throws JsonProcessingException {
ObjectMapper mapper=new ObjectMapper();
Book book=new Book();
book.setId(1);
book.setName("三国演义");
book.setPrice(39.90);
String jsonStr=mapper.writeValueAsString(book);
System.out.println(jsonStr);
}
看结果:{"id":1,"name":"三国演义","price":39.9}
二、复杂一点的对象
public class User {
private int id;
private String name;
private String pwd;
private List<Book> bookList;
public User() {
// TODO Auto-generated constructor stub
}
public User(int id, String name, String pwd, List<Book> bookList) {
super();
this.id = id;
this.name = name;
this.pwd = pwd;
this.bookList = bookList;
}
//省略set/get方法
}
public class Book {
private int id;
private String name;
private double price;
public Book() {
}
public Book(int id, String name, double price) {
super();
this.id = id;
this.name = name;
this.price = price;
}
//省略set/get方法
}
ObjectMapper mapper=new ObjectMapper();
Book book=new Book(1, "三国演义", 39.90);
User user=new User(1, "张三", "password", book);
String jsonStr=mapper.writeValueAsString(user);
System.out.println(jsonStr);
结果:{"id":1,"name":"张三","pwd":"password","book":{"id":1,"name":"三国演义","price":39.9}}
三、对象属性为list集合
private int id;
private String name;
private String pwd;
private List<Book> bookList;
public User() {
// TODO Auto-generated constructor stub
}
public User(int id, String name, String pwd, List<Book> bookList) {
super();
this.id = id;
this.name = name;
this.pwd = pwd;
this.bookList = bookList;
}
//省略set/get方法
private int id;
private String name;
private double price;
public Book() {
}
public Book(int id, String name, double price) {
super();
this.id = id;
this.name = name;
this.price = price;
}
ObjectMapper mapper=new ObjectMapper();
List<Book> bookList=new ArrayList<Book>();
Book book1=new Book(1, "三国演义", 39.90);
Book book2=new Book(2, "西游记", 49.90);
Book book3=new Book(3, "水浒传", 59.90);
Book book4=new Book(4, "红楼梦", 69.90);
bookList.add(book1);
bookList.add(book2);
bookList.add(book3);
bookList.add(book4);
User user=new User(1001, "张三", "password", bookList);
String jsonStr=mapper.writeValueAsString(user);
System.out.println(jsonStr);
结果:{"id":1001,"name":"张三","pwd":"password","bookList":[{"id":1,"name":"三国演义","price":39.9},{"id":2,"name":"西游记","price":49.9},{"id":3,"name":"水浒传","price":59.9},{"id":4,"name":"红楼梦","price":69.9}]}
四、单纯的list集合转换
ObjectMapper mapper=new ObjectMapper();
List<Book> bookList=new ArrayList<Book>();
Book book1=new Book(1, "三国演义", 39.90);
Book book2=new Book(2, "西游记", 49.90);
Book book3=new Book(3, "水浒传", 59.90);
Book book4=new Book(4, "红楼梦", 69.90);
bookList.add(book1);
bookList.add(book2);
bookList.add(book3);
bookList.add(book4);
String jsonStr=mapper.writeValueAsString(bookList);
System.out.println(jsonStr);
结果:[{"id":1,"name":"三国演义","price":39.9},{"id":2,"name":"西游记","price":49.9},{"id":3,"name":"水浒传","price":59.9},{"id":4,"name":"红楼梦","price":69.9}]
五、map集合
ObjectMapper mapper=new ObjectMapper();
List<Book> bookList=new ArrayList<Book>();
Map<String, Object> map=new HashMap<String, Object>();
Book book1=new Book(1, "三国演义", 39.90);
Book book2=new Book(2, "西游记", 49.90);
bookList.add(book1);
bookList.add(book2);
User user=new User(1001, "张三", "password", bookList);
map.put("book1", book1);
map.put("book2", book2);
map.put("user", user);
String jsonStr=mapper.writeValueAsString(map);
System.out.println(jsonStr);
结果:{"book2":{"id":2,"name":"西游记","price":49.9},"book1":{"id":1,"name":"三国演义","price":39.9},"user":{"id":1001,"name":"张三","pwd":"password","bookList":[{"id":1,"name":"三国演义","price":39.9},{"id":2,"name":"西游记","price":49.9}]}}
可以看出jackson对于把数据转换为json格式的数据很是方便。
那么如何把json数据反过来转换为对象呢?
一、转换普通对象
ObjectMapper mapper=new ObjectMapper();
String jsonStr="{\"id\":1,\"name\":\"三国演义\",\"price\":39.9}";
Book book=mapper.readValue(jsonStr, Book.class);
System.out.println(book);
结果:Book [id=1, name=三国演义, price=39.9]
json数据转map集合
ObjectMapper mapper=new ObjectMapper();
String jsonStr="{\"username\":\"张三\",\"password\":\"123456\"}";
Map<String, String> map=mapper.readValue(jsonStr, new TypeReference<Map<String, String>>() {});
for (String key : map.keySet()) {
System.out.println(key+"="+map.get(key));
}
结果:username=张三
password=123456
json转list
ObjectMapper mapper=new ObjectMapper();
String jsonStr="[\"1001\",\"张三\",\"123456\"]";
List<String> list=mapper.readValue(jsonStr, new TypeReference<List<String>>() {});
for (String str : list) {
System.out.println(str);
}
结果:1001
张三
123456
以前光听别人说jackson很好用,没想到会这么好用。。。。。。。