gson快速入门和使用详解
gson介绍
Google Gson是一个简单的基于Java的库,用于将Java对象序列化为JSON,反之亦然。 它是由Google开发的一个开源库。
以下几点说明为什么应该使用这个库 :
标准化 - Gson是一个由Google管理的标准化库。
高效 - 这是对Java标准库的可靠,快速和高效的扩展。
优化 - Gson库经过高度优化。
支持泛型 - 它为泛型提供了广泛的支持。
支持复杂的内部类 - 它支持具有深度继承层次结构的复杂对象。
gson引入
maven引入
<dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.8.2</version>
</dependency>
gson的api快速入门
//javaBean-->json@Testpublic void test1(){Gson gson = new Gson();Person p = new Person("张三", "123", 500, new Book("三国演义", "罗贯中"));String json = gson.toJson(p);System.out.println(json);}
//json-->javaBean@Testpublic void test2(){String json = "{\"username\":\"张三\",\"password\":\"123\",\"money\":500,\"book\":{\"id\":0,\"name\":\"三国演义\",\"price\":0,\"author\":\"罗贯中\"}}";Gson gson = new Gson();Person p = gson.fromJson(json, Person.class);System.out.println(p.getUsername()+"--"+p.getBook().getName());}
//list-->json@Testpublic void test3() {List<Person> list = new ArrayList<Person>();Person p = new Person("张三", "123", 500, new Book("三国演义", "罗贯中"));list.add(p);p = new Person("李四", "123", 500, new Book("三国演义", "罗贯中"));list.add(p);Gson gson = new Gson();String gsonStr = gson.toJson(list);System.out.println(gsonStr);}
//map-->json@Testpublic void test4() {Map<String, Person> map = new HashMap<String, Person>();Person p = new Person("张三", "123", 500, new Book("三国演义", "罗贯中"));map.put("p1", p);p = new Person("李四", "123", 500, new Book("三国演义", "罗贯中"));map.put("p2", p);Gson gson = new Gson();String gsonStr = gson.toJson(map);System.out.println(gsonStr);}//json-->list@Testpublic void test5() {String str = "[{\"username\":\"张三\",\"password\":\"123\",\"money\":500,\"book\":{\"id\":0,\"name\":\"三国演义\",\"price\":0,\"author\":\"罗贯中\"}},{\"username\":\"李四\",\"password\":\"123\",\"money\":500,\"book\":{\"id\":0,\"name\":\"三国演义\",\"price\":0,\"author\":\"罗贯中\"}}]";Gson gson = new Gson();List<Person> ps = gson.fromJson(str,new TypeToken<List<Person>>() { }.getType());for (Person person : ps) {System.out.println(person.getUsername()+"---"+person.getBook().getName());}}//json-->map@Testpublic void test6(){String str = "{\"p1\":{\"username\":\"张三\",\"password\":\"123\",\"money\":500,\"book\":{\"id\":0,\"name\":\"三国演义\",\"price\":0,\"author\":\"罗贯中\"}},\"p2\":{\"username\":\"李四\",\"password\":\"123\",\"money\":500,\"book\":{\"id\":0,\"name\":\"红楼梦\",\"price\":0,\"author\":\"曹雪芹\"}}}";Gson gson = new Gson();Map<String, Person> map = gson.fromJson(str, new TypeToken<Map<String, Person>>(){}.getType());Set<String> keys = map.keySet();for(String key:keys){System.out.println(map.get(key).getUsername()+"--"+map.get(key).getBook().getName());}}
public class Person {private String username;private String password;private int money;private Book book;public Person() {}public Person(Book book) {this.book = book;}public Book getBook() {return book;}public void setBook(Book book) {this.book = book;}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 int getMoney() {return money;}public void setMoney(int money) {this.money = money;}public Person(String username, String password, int money, Book book) {super();this.username = username;this.password = password;this.money = money;this.book = book;}}
public class Book {private int id;private String name;private int price;private String author;private Detail detail;private Attribute attribute;public Attribute getAttribute() {return attribute;}public void setAttribute(Attribute attribute) {this.attribute = attribute;}public Detail getDetail() {return detail;}public void setDetail(Detail detail) {this.detail = detail;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getPrice() {return price;}public void setPrice(int price) {this.price = price;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}public Book(String name, String author) {this.name = name;this.author = author;}public Book() {}}
注意事项:
把json字符串转为集合时,new TypeToken<>(){}.getType()在eclipse中貌似不能够自动提示,如果你的电脑也是这样的话,建议这里的代码自己手动敲一下,eclipse只是不会自动提示,自己敲出来的是不会报错的,嗯,我就遇到这一个小小的问题,总体来说这个东东还是很好用的。