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 htmlu003e u003chtmlu003e u003cheadu003e u003ctitleu003eu003c/titleu003e u003c/headu003e u003cbodyu003e u003c/bodyu003e u003c/htmlu003e"
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>
原文地址:https://www.cnblogs.com/veryvalley/p/8058090.html