JSON轉化工具的使用
阿新 • • 發佈:2019-01-01
概述
JSON是一種輕量化的資料傳輸格式,在各種場景都有運用。比如在ajax中,服務端的資料一般通過JSON字串的格式傳輸給前端,前端ajax引擎自動將JSON字串轉化為JS物件(需要將ajax的返回內容格式設定為"json")。那麼此時我們在後臺伺服器中就需要將封裝好的JavaBean物件轉化為JSON格式字串來傳輸給前臺ajax引擎,此時使用JSON轉化工具將大大簡化我們程式碼量。
首先我們需要明確的是什麼是JSON格式
JSON格式有兩種,一種是物件格式,另一種是陣列格式(也可以叫集合)。
- 物件格式:{"key1":value1,"key2":value2......}
- 陣列形式:[{物件1},{物件2}....]
需要注意的是
- 這裡的value可以是字串形式,也可以是數值形式,還可以是布林型(除了字串形式需要打引號,其他兩種都不用打)
- JSON嚴格的規定中,key是必須打雙引號的,不能為單引號,所以在java程式碼手動連線JSON字串時需要用轉義字元。
- 雖然在跟多環境中相容key不打引號的JSON格式,但為了在所有環境下相容我們還是都加上雙引號吧。
JSON轉換工具的使用
一. GSON轉換工具的使用
- 在使用之前我們需要引入所需的jar包(gson-2.2.4.jar)。
- 建立Gson物件。
- 呼叫該物件的toJson()方法。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { CategoryService service=new CategoryService(); List<Category> list=service.getCategoryList(); //建立Gson物件 Gson gson=new Gson(); //呼叫toJson()方法 String json = gson.toJson(list); response.setContentType("text/html;charset=UTF-8"); response.getWriter().write(json); }
二.JSONLib轉換工具的使用
使用前需要導的包:
1.獲取JSON字串中的屬性值(字串->java物件)
public class Hello {
@Test
public void test() {
String jsonStr="{\"id\":\"123\",\"name\":\"tom\"}";
JSONObject json = JSONObject.fromObject(jsonStr);
int id = json.getInt("id");
String name=json.getString("name");
}
}
2.將Java物件轉換成JSON字串(java物件->字串)
在演示之前我們給出一個JavaBean物件(省略get和set方法):
public class User {
private Long uid;
private String email;
private Long initSize;
//get和set方法省略
}
2.1 將List集合轉換成JSON字串陣列形式(使用JSONArray物件)
public class Hello {
@Test
public void test() {
List<User> list=new ArrayList<>();
User u1 = new User();
u1.setUid(1L);
u1.setEmail("[email protected]");
list.add(u1);
User u2=new User();
u2.setUid(2L);
u2.setEmail("[email protected]");
list.add(u2);
//將List轉換成Json字串
JSONArray json = JSONArray.fromObject(list);
String jsonStr=json.toString();
System.out.println(jsonStr);
}
}
輸出結果:
2.2將JavaBean物件轉換成JSON字串物件形式(使用JSONObject方法)
public class Hello {
@Test
public void test() {
User u = new User();
u.setUid(1L);
u.setEmail("[email protected]");
JSONArray json = JSONArray.fromObject(u);
String jsonStr=json.toString();
System.out.println(jsonStr);
}
}
輸出結果:
2.3.將現有物件轉換成JSON字串時,新增排除屬性
在某些情況下,我們轉換物件中不是所有屬性都需要轉換成JSON字串中,此時我們只需要新增排除即可。例如在2.1和2.2中User物件中的initSize屬性,我們不需要轉換成字串,我們只需要這麼做。
public class Hello {
@Test
public void test() {
User u = new User();
u.setUid(1L);
u.setEmail("[email protected]");
//新增排除
JsonConfig config=new JsonConfig();
config.setExcludes(new String[] {"initSize"});
JSONObject json = JSONObject.fromObject(u,config);
String jsonStr=json.toString();
System.out.println(jsonStr);
}
}
輸出結果:
注:這裡新增的排除,不是隻對當前層級的Java物件有用,對當前層級中引用的其他物件中的屬性同樣有用。在有的Java物件中我們可能會封裝引用型別的屬性,也有可能多個物件的互相引用。在轉換時會由於形成了死迴圈而報錯。此時必須新增排除,破壞原先的迴圈巢狀才能成功轉換。
Java物件的巢狀迴圈導致轉換失敗的問題,詳見博主另一篇文章: