1. 程式人生 > >JSON轉化工具的使用

JSON轉化工具的使用

概述

     JSON是一種輕量化的資料傳輸格式,在各種場景都有運用。比如在ajax中,服務端的資料一般通過JSON字串的格式傳輸給前端,前端ajax引擎自動將JSON字串轉化為JS物件(需要將ajax的返回內容格式設定為"json")。那麼此時我們在後臺伺服器中就需要將封裝好的JavaBean物件轉化為JSON格式字串來傳輸給前臺ajax引擎,此時使用JSON轉化工具將大大簡化我們程式碼量。

首先我們需要明確的是什麼是JSON格式

     JSON格式有兩種,一種是物件格式,另一種是陣列格式(也可以叫集合)。    

  • 物件格式:{"key1":value1,"key2":value2......}
  • 陣列形式:[{物件1},{物件2}....]

   需要注意的是

  1. 這裡的value可以是字串形式,也可以是數值形式,還可以是布林型(除了字串形式需要打引號,其他兩種都不用打)
  2. JSON嚴格的規定中,key是必須打雙引號的,不能為單引號,所以在java程式碼手動連線JSON字串時需要用轉義字元。
  3. 雖然在跟多環境中相容key不打引號的JSON格式,但為了在所有環境下相容我們還是都加上雙引號吧。                     

JSON轉換工具的使用

    一. GSON轉換工具的使用

  1. 在使用之前我們需要引入所需的jar包(gson-2.2.4.jar)。
  2. 建立Gson物件。
  3. 呼叫該物件的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物件的巢狀迴圈導致轉換失敗的問題,詳見博主另一篇文章: