Json之java-Gson
Gson-Google出品的Json处理工具,网上好评大片,先来学习一下。
先列出网上找到的一个评价:
Gson是目前功能最全的Json解析神器,Gson当初是为因应Google公司内部需求而由Google自行研发而来,但自从在2008年五月公开发布第一版后已被许多公司或用户应用。Gson的应用主要为toJson与fromJson两个转换函数,无依赖,不需要例外额外的jar,能够直接跑在JDK上。
而在使用这种对象转换之前需先创建好对象的类型以及其成员才能成功的将JSON字符串成功转换成相对应的对象。类里面只要有get和set方法,Gson完全可以将复杂类型的json到bean或bean到json的转换,是JSON解析的神器。
实践的一些代码
1 import com.google.gson.*; 2 import com.google.gson.reflect.TypeToken; 3 import org.junit.Test; 4 5 import java.util.ArrayList; 6 import java.util.Date; 7 import java.util.List; 8 9 public class GsonUse { 10 /** 11 * Gson常用场景 12 */ 13 @Test 14 public void useGsonCommon() { 15 Gson gson = new Gson(); // 解析json最基础的工具类 16 GsonBuilder gsonBuilder = new GsonBuilder(); // Gson对象构建类,可以gson对象做一些全局设置。再创建gson对象 17 gson = gsonBuilder.create(); // 能过GsonBuilder ,生成gson对象 18 19 JsonParser jsonParser = new JsonParser(); // Json解析器 20 JsonElement jsonElement = jsonParser.parse("{}"); // 用Json解析器解析json字符串为Json元素, 21 // JsonElement 可以是JsonObject或者JsonArray,根据实际发问转化 22 JsonObject jsonObject = new JsonObject(); 23 jsonObject = jsonElement.getAsJsonObject(); 24 JsonArray jsonArray = new JsonArray(); 25 jsonArray = jsonArray.getAsJsonArray(); 26 27 User user = new User(); 28 user.setAge(12); 29 user.setName("[123]"); 30 // bean -> json 31 String userJson = gson.toJson(user); 32 System.out.println(userJson); 33 // json -> bean 34 User u = gson.fromJson(userJson, User.class); 35 36 //构造集合 37 List<User> users = new ArrayList<User>(); 38 User u_i = null; 39 for (int i = 0; i < 10; i++) { 40 u_i = new User(); 41 u_i.setAge(i); 42 u_i.setName("name" + i); 43 users.add(u_i); 44 } 45 String usersJson = gson.toJson(users); 46 System.out.println(userJson); 47 // **********************注意:TypeToken的用法 ********************** 48 List<User> userList = gson.fromJson(usersJson, new TypeToken<List<User>>() { 49 }.getType()); 50 // Set<User> userSet = gson.fromJson(usersJson,new TypeToken<Set<User>>(){}.getType()); 51 // Map<String,User> userMap = gson.fromJson(userJson,new TypeToken<Map<String,User>>(){}.getType()); 52 System.out.println(userList); 53 } 54 55 /** 56 * 格式化json 57 */ 58 @Test 59 public void formateJson() { 60 String jsonStr = "[{\"id\":\"1\",\"name\":\"Json技术\"},{\"id\":\"2\",\"name\":\"java技术\"}]"; 61 // 创建能够格式化的转出json字符串的Gson对象 62 Gson gson = new GsonBuilder().setPrettyPrinting().create(); 63 JsonParser jsonParser = new JsonParser(); 64 JsonElement jsonElement = jsonParser.parse(jsonStr); 65 String formatedJson = gson.toJson(jsonElement); 66 // 将json字符串格式化输出 67 System.out.println(formatedJson); 68 } 69 70 /** 71 * Json属性操作:删除,添加,判断是否存在属性,修改 72 */ 73 @Test 74 public void jsonAttrOpt() { 75 String jsonStr = "[{\"id\":\"1\",\"name\":\"Json技术\"},{\"id\":\"2\",\"name\":\"java技术\"}]"; 76 JsonParser jsonParser = new JsonParser(); 77 JsonElement jsonElement = jsonParser.parse(jsonStr); 78 JsonArray jsonArray = jsonElement.getAsJsonArray(); 79 JsonObject jObj = jsonArray.get(0).getAsJsonObject(); 80 // 判断是否存在属性id 81 boolean hasId = jObj.has("id"); 82 System.out.println(hasId); 83 84 // 添加属性 85 jObj.addProperty("age", 12); 86 System.out.println(jObj); 87 // 删除属性 88 jObj.remove("age"); 89 System.out.println(jObj); 90 //修改属性,先删除,再添加 91 jObj.remove("name"); 92 jObj.addProperty("name", new Gson().toJson("[8888]")); 93 System.out.println(jObj); 94 } 95 96 /** 97 * 通过GsonBuilder对Gson对象做一些配置,如日期格式化等等 98 */ 99 @Test 100 public void gsonBuilderUse() { 101 GsonBuilder gsonBuilder = new GsonBuilder(); 102 // 设置时间格式 103 gsonBuilder.setDateFormat("yyyy-MM-dd hh:mm:ss"); 104 // 取消对html的转义 105 //gsonBuilder.disableHtmlEscaping(); 106 107 Gson gson = gsonBuilder.create(); 108 System.out.println(gson.toJson(new Date())); 109 110 System.out.println(gson.toJson("<!DOCTYPE html> <html> <head> <title></title> </head> <body> </body> </html>")); 111 112 //转义输出:"\u003c!DOCTYPE html\u003e \u003chtml\u003e \u003chead\u003e \u003ctitle\u003e\u003c/title\u003e \u003c/head\u003e \u003cbody\u003e \u003c/body\u003e \u003c/html\u003e" 113 // 不转义输出: "<!DOCTYPE html> <html> <head> <title></title> </head> <body> </body> </html>" 114 115 } 116 }
添加Gson依赖
1 <dependency> 2 <groupId>com.google.code.gson</groupId> 3 <artifactId>gson</artifactId> 4 <version>2.8.2</version> 5 </dependency>