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很好用,没想到会这么好用。。。。。。。