1. 程式人生 > >JSON、JSONObject、JSONArray、javabean之間的關係、獲取值以及相互轉換

JSON、JSONObject、JSONArray、javabean之間的關係、獲取值以及相互轉換

PS:如果只想看方法直接向後滑動。

JSON、JSONObject、JSONArray都是FastJson框架中的東西,JSON協議使用方便,越來越流行,JSON的處理器有很多,這裡先介紹一下FastJson,FastJson是阿里的開源框架,被不少企業使用,是一個極其優秀的Json框架。

FastJson的優點:

1.FastJson數度快,無論序列化和反序列化,都是當之無愧的fast  2.功能強大(支援普通JDK類包括任意Java Bean Class、Collection、Map、Date或enum)  3.零依賴(沒有依賴其它任何類庫)

JSON、JSONObject、JSONArray、javabean關係的解析:

首先JSON、JSONObject、JSONArray是屬於FastJson框架的類,它們就是普通的類只不過在FastJson框架賦予了它們對json格式字元的處理能力。

JSON:fastJson的解析器,用於JSON格式字串與JSON物件及javaBean之間的轉換。

JSONObject:fastJson提供處理物件樣子的json字元的類。

JSONArray:fastJson提供處理陣列樣子的json字元的類。

當然你也可以不用JSONObject、JSONArray,直接將json字串轉換為能匹配上的javabean。如果你沒有能匹配的那你就考慮轉換為JSONObject、JSONArray,因為JSONObject、JSONArray也可以對屬性進行操作。

---------------------------------------------------------------------------------------------------------------------------------------------------------------

宣告,由於JSONObject和JSONArray繼承了JSON,所以也可以直接使用兩者對JSON格式字串與JSON物件及javaBean之間做轉換,不過為了避免混淆下面方法都使用JSON。

1.json字元 轉換為 JSONObject

  JSONObject jsonObject = JSON.parseObject("物件樣子的json字元");

//  獲取屬性: 
String teacherName = jsonObject.getString("teacherName"); 
Integer teacherAge = jsonObject.getInteger("teacherAge"); 
JSONObject course = jsonObject.getJSONObject("course"); 
JSONArray students = jsonObject.getJSONArray("students");

2.json字元 轉換為 JSONArray

JSONObject jsonObject = JSON.parseObject("陣列樣子的json字元");         

//獲取陣列中物件(其實就是JSONObject):jsonArray為JSONArray型別
JSONObject jsonObject = jsonArray.getJSONObject(i);
JSONObject jsonObject = (JSONObject) jsonArray.get(i);

3.json字元 轉換為 javabean

//普通物件
Student student = JSON.parseObject("物件樣子的json字元", new TypeReference<Student>() {});
//因為JSONObject繼承了JSON,所以這樣也是可以的
//Student student1 = JSONObject.parseObject(JSON_OBJ_STR, new TypeReference<Student>(){});

//陣列型別
ArrayList<Student> students = JSON.parseObject(JSON_ARRAY_STR,new TypeReference<ArrayList<Student>>() {});

//因為JSONArray繼承了JSON,所以這樣也是可以的
//ArrayList<Student> students1 = JSONArray.parseObject(JSON_ARRAY_STR, new TypeReference<ArrayList<Student>>() {});
        
for (Student student : students) {
     System.out.println(student.getStudentName()+":"+student.getStudentAge());
}

json字串與javaBean之間的轉換推薦使用 TypeReference<T> 這個類,使用泛型可以更加清晰,由於其構造方法使用 protected 進行修飾,所以在其他包下建立其物件的時候,要用其實現類的子類:new TypeReference<Teacher>() {}。當然也有其它的轉換方式

4.javabean 轉換為 json字元  : JSON.toJSONString(obj);

5.JSONObject、JSONArray 轉換為 json字元     :toJSONString()

6.javabean 轉換為 JSONObject、JSONArray:JSON.toJSON(obj),注意:強制型別轉換。