1. 程式人生 > >Json之java-Gson

Json之java-Gson

map att new t pretty 找到 json處理 system ons 實踐

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>" } }

  

Json之java-Gson