Gson-Google出品的Json处理工具,网上好评大片,先来学习一下。
先列出网上找到的一个评价:
Gson是目前功能最全的Json解析神器,Gson当初是为因应Google公司内部需求而由Google自行研发而来,但自从在2008年五月公开发布第一版后已被许多公司或用户应用。Gson的应用主要为toJson与fromJson两个转换函数,无依赖,不需要例外额外的jar,能够直接跑在JDK上。
而在使用这种对象转换之前需先创建好对象的类型以及其成员才能成功的将JSON字符串成功转换成相对应的对象。类里面只要有get和set方法,Gson完全可以将复杂类型的json到bean或bean到json的转换,是JSON解析的神器。
实践的一些代码
import com.google.gson.*; import com.google.gson.reflect.TypeToken; import org.junit.Test; import java.util.ArrayList; import java.util.Date; import java.util.List; public class GsonUse {
/**
* Gson常用场景
*/
@Test
public void useGsonCommon() {
Gson gson = new Gson(); // 解析json最基础的工具类
GsonBuilder gsonBuilder = new GsonBuilder(); // Gson对象构建类,可以gson对象做一些全局设置。再创建gson对象
gson = gsonBuilder.create(); // 能过GsonBuilder ,生成gson对象
JsonParser jsonParser = new JsonParser(); // Json解析器
JsonElement jsonElement = jsonParser.parse("{}"); // 用Json解析器解析json字符串为Json元素,
// JsonElement 可以是JsonObject或者JsonArray,根据实际发问转化
JsonObject jsonObject = new JsonObject();
jsonObject = jsonElement.getAsJsonObject();
JsonArray jsonArray = new JsonArray();
jsonArray = jsonArray.getAsJsonArray();
User user = new User();
user.setAge(12);
user.setName("[123]");
// bean -> json
String userJson = gson.toJson(user);
System.out.println(userJson);
// json -> bean
User u = gson.fromJson(userJson, User.class);
//构造集合
List<User> users = new ArrayList<User>();
User u_i = null;
for (int i = 0; i < 10; i++) {
u_i = new User();
u_i.setAge(i);
u_i.setName("name" + i);
users.add(u_i);
}
String usersJson = gson.toJson(users);
System.out.println(userJson);
// **********************注意:TypeToken的用法 **********************
List<User> userList = gson.fromJson(usersJson, new TypeToken<List<User>>() {
}.getType());
// Set<User> userSet = gson.fromJson(usersJson,new TypeToken<Set<User>>(){}.getType());
// Map<String,User> userMap = gson.fromJson(userJson,new TypeToken<Map<String,User>>(){}.getType());
System.out.println(userList);
}
/** * 格式化json */ @Test public void formateJson() { String jsonStr = "[{\"id\":\"1\",\"name\":\"Json技术\"},{\"id\":\"2\",\"name\":\"java技术\"}]"; // 创建能够格式化的转出json字符串的Gson对象 Gson gson = new GsonBuilder().setPrettyPrinting().create(); JsonParser jsonParser = new JsonParser(); JsonElement jsonElement = jsonParser.parse(jsonStr); String formatedJson = gson.toJson(jsonElement); // 将json字符串格式化输出 System.out.println(formatedJson); } /** * Json属性操作:删除,添加,判断是否存在属性,修改 */ @Test public void jsonAttrOpt() { String jsonStr = "[{\"id\":\"1\",\"name\":\"Json技术\"},{\"id\":\"2\",\"name\":\"java技术\"}]"; JsonParser jsonParser = new JsonParser(); JsonElement jsonElement = jsonParser.parse(jsonStr); JsonArray jsonArray = jsonElement.getAsJsonArray(); JsonObject jObj = jsonArray.get(0).getAsJsonObject(); // 判断是否存在属性id boolean hasId = jObj.has("id"); System.out.println(hasId); // 添加属性 jObj.addProperty("age", 12); System.out.println(jObj); // 删除属性 jObj.remove("age"); System.out.println(jObj); //修改属性,先删除,再添加 jObj.remove("name"); jObj.addProperty("name", new Gson().toJson("[8888]")); System.out.println(jObj); } /** * 通过GsonBuilder对Gson对象做一些配置,如日期格式化等等 */ @Test public void gsonBuilderUse() { GsonBuilder gsonBuilder = new GsonBuilder(); // 设置时间格式 gsonBuilder.setDateFormat("yyyy-MM-dd hh:mm:ss"); // 取消对html的转义 //gsonBuilder.disableHtmlEscaping(); Gson gson = gsonBuilder.create(); System.out.println(gson.toJson(new Date())); System.out.println(gson.toJson("<!DOCTYPE html> <html> <head> <title></title> </head> <body> </body> </html>")); //转义输出:"\u003c!DOCTYPE html\u003e \u003chtml\u003e \u003chead\u003e \u003ctitle\u003e\u003c/title\u003e \u003c/head\u003e \u003cbody\u003e \u003c/body\u003e \u003c/html\u003e" // 不转义输出: "<!DOCTYPE html> <html> <head> <title></title> </head> <body> </body> </html>" } }