返回主頁 你是風兒 博客園首頁新隨筆聯繫訂閱管理 隨筆 - 29 文章 - 0 評論 - 23 FastJson對於JSON格式字符串、JSON對象及JavaBean之間的相互轉換 fastJson對於json格式字符串的解析主要用到了一下三個類: JSON:fastJson的解析器,用於JSON格式字符串與JSON對象及javaBean之間的轉換。 JSONObject:fastJson提供的json對象。 JSONArray:fastJson提供json數組對象。 咱們能夠把JSONObject當成一個Map<String,Object>來看,只是JSONObject提供了更爲豐富便捷的方法,方便咱們對於對象屬性的操做。咱們看一下源碼。 一樣咱們能夠把JSONArray當作一個List<Object>,能夠把JSONArray當作JSONObject對象的一個集合。 此外,因爲JSONObject和JSONArray繼承了JSON,因此說也能夠直接使用二者對JSON格式字符串與JSON對象及javaBean之間作轉換,不過爲了不混淆咱們仍是使用JSON。 首先定義三個json格式的字符串,做爲咱們的數據源。 複製代碼 //json字符串-簡單對象型 private static final String JSON_OBJ_STR = "{\"studentName\":\"lily\",\"studentAge\":12}"; //json字符串-數組類型 private static final String JSON_ARRAY_STR = "[{\"studentName\":\"lily\",\"studentAge\":12},{\"studentName\":\"lucy\",\"studentAge\":15}]"; //複雜格式json字符串 private static final String COMPLEX_JSON_STR = "{\"teacherName\":\"crystall\",\"teacherAge\":27,\"course\":{\"courseName\":\"english\",\"code\":1270},\"students\":[{\"studentName\":\"lily\",\"studentAge\":12},{\"studentName\":\"lucy\",\"studentAge\":15}]}"; 複製代碼 示例1:JSON格式字符串與JSON對象之間的轉換。 示例1.1-json字符串-簡單對象型與JSONObject之間的轉換 複製代碼 /** * json字符串-簡單對象型與JSONObject之間的轉換 */ public static void testJSONStrToJSONObject(){ JSONObject jsonObject = JSON.parseObject(JSON_OBJ_STR); //JSONObject jsonObject1 = JSONObject.parseObject(JSON_OBJ_STR); //由於JSONObject繼承了JSON,因此這樣也是能夠的 System.out.println(jsonObject.getString("studentName")+":"+jsonObject.getInteger("studentAge")); } 複製代碼 示例1.2-json字符串-數組類型與JSONArray之間的轉換 複製代碼 /** * json字符串-數組類型與JSONArray之間的轉換 */ public static void testJSONStrToJSONArray(){ JSONArray jsonArray = JSON.parseArray(JSON_ARRAY_STR); //JSONArray jsonArray1 = JSONArray.parseArray(JSON_ARRAY_STR);//由於JSONArray繼承了JSON,因此這樣也是能夠的 //遍歷方式1 int size = jsonArray.size(); for (int i = 0; i < size; i++){ JSONObject jsonObject = jsonArray.getJSONObject(i); System.out.println(jsonObject.getString("studentName")+":"+jsonObject.getInteger("studentAge")); } //遍歷方式2 for (Object obj : jsonArray) { JSONObject jsonObject = (JSONObject) obj; System.out.println(jsonObject.getString("studentName")+":"+jsonObject.getInteger("studentAge")); } } 複製代碼 示例1.3-複雜json格式字符串與JSONObject之間的轉換 複製代碼 /** * 複雜json格式字符串與JSONObject之間的轉換 */ public static void testComplexJSONStrToJSONObject(){ JSONObject jsonObject = JSON.parseObject(COMPLEX_JSON_STR); //JSONObject jsonObject1 = JSONObject.parseObject(COMPLEX_JSON_STR);//由於JSONObject繼承了JSON,因此這樣也是能夠的 String teacherName = jsonObject.getString("teacherName"); Integer teacherAge = jsonObject.getInteger("teacherAge"); JSONObject course = jsonObject.getJSONObject("course"); JSONArray students = jsonObject.getJSONArray("students"); } 複製代碼 示例2:JSON格式字符串與javaBean之間的轉換。 首先,咱們針對數據源所示的字符串,提供三個javaBean。 複製代碼 public class Student { private String studentName; private Integer studentAge; public String getStudentName() { return studentName; } public void setStudentName(String studentName) { this.studentName = studentName; } public Integer getStudentAge() { return studentAge; } public void setStudentAge(Integer studentAge) { this.studentAge = studentAge; } } 複製代碼 複製代碼 public class Course { private String courseName; private Integer code; public String getCourseName() { return courseName; } public void setCourseName(String courseName) { this.courseName = courseName; } public Integer getCode() { return code; } public void setCode(Integer code) { this.code = code; } } 複製代碼 複製代碼 public class Teacher { private String teacherName; private Integer teacherAge; private Course course; private List<Student> students; public String getTeacherName() { return teacherName; } public void setTeacherName(String teacherName) { this.teacherName = teacherName; } public Integer getTeacherAge() { return teacherAge; } public void setTeacherAge(Integer teacherAge) { this.teacherAge = teacherAge; } public Course getCourse() { return course; } public void setCourse(Course course) { this.course = course; } public List<Student> getStudents() { return students; } public void setStudents(List<Student> students) { this.students = students; } } 複製代碼 json字符串與javaBean之間的轉換推薦使用 TypeReference<T> 這個類,使用泛型能夠更加清晰,固然也有其它的轉換方式,這裏就不作探討了。 示例2.1-json字符串-簡單對象型與javaBean之間的轉換 複製代碼 /** * json字符串-簡單對象與JavaBean_obj之間的轉換 */ public static void testJSONStrToJavaBeanObj(){ Student student = JSON.parseObject(JSON_OBJ_STR, new TypeReference<Student>() {}); //Student student1 = JSONObject.parseObject(JSON_OBJ_STR, new TypeReference<Student>() {});//由於JSONObject繼承了JSON,因此這樣也是能夠的 System.out.println(student.getStudentName()+":"+student.getStudentAge()); } 複製代碼 示例2.2-json字符串-數組類型與javaBean之間的轉換 複製代碼 /** * json字符串-數組類型與JavaBean_List之間的轉換 */ public static void testJSONStrToJavaBeanList(){ ArrayList<Student> students = JSON.parseObject(JSON_ARRAY_STR, new TypeReference<ArrayList<Student>>() {}); //ArrayList<Student> students1 = JSONArray.parseObject(JSON_ARRAY_STR, new TypeReference<ArrayList<Student>>() {});//由於JSONArray繼承了JSON,因此這樣也是能夠的 for (Student student : students) { System.out.println(student.getStudentName()+":"+student.getStudentAge()); } } 複製代碼 示例2.3-複雜json格式字符串與與javaBean之間的轉換 複製代碼 /** * 複雜json格式字符串與JavaBean_obj之間的轉換 */ public static void testComplexJSONStrToJavaBean(){ Teacher teacher = JSON.parseObject(COMPLEX_JSON_STR, new TypeReference<Teacher>() {}); //Teacher teacher1 = JSON.parseObject(COMPLEX_JSON_STR, new TypeReference<Teacher>() {});//由於JSONObject繼承了JSON,因此這樣也是能夠的 String teacherName = teacher.getTeacherName(); Integer teacherAge = teacher.getTeacherAge(); Course course = teacher.getCourse(); List<Student> students = teacher.getStudents(); } 複製代碼 對於TypeReference<T>,因爲其構造方法使用 protected 進行修飾,因此在其餘包下建立其對象的時候,要用其實現類的子類:new TypeReference<Teacher>() {} 此外的: 1,對於JSON對象與JSON格式字符串的轉換能夠直接用 toJSONString()這個方法。 2,javaBean與JSON格式字符串之間的轉換要用到:JSON.toJSONString(obj); 3,javaBean與json對象間的轉換使用:JSON.toJSON(obj),而後使用強制類型轉換,JSONObject或者JSONArray。 最後說一點,咱們做爲程序員,研究問題仍是要仔細深刻一點的。當你對原理了解的有夠透徹,開發起來也就駕輕就熟了,不少開發中的問題和疑惑也就迎刃而解了,並且在面對其餘問題的時候也可作到舉一反三。固然在開發中沒有太多的時間讓你去研究原理,開發中要以實現功能爲前提,可等項目上線的後,你有大把的時間或者空餘的時間,你大可去刨根問底,深刻的去研究一項技術,爲以爲這對一名程序員的成長是很重要的事情。 分類: JSON 好文要頂 關注我 收藏該文 你是風兒 關注 - 2 粉絲 - 54 +加關注 17 0 « 上一篇:快速排序算法 » 下一篇:mysql數據庫插入數據獲取自增主鍵的三種方式(jdbc PreparedStatement方式、mybatis useGeneratedKeys方式、mybatis selectKey方式) posted @ 2017-07-02 14:42 你是風兒 閱讀(192815) 評論(10) 編輯 收藏 評論列表 回覆引用 #1樓 2017-11-18 14:59 esileme 能夠能夠,很不錯~ 支持(0)反對(0) 回覆引用 #2樓 2017-12-18 13:58 回眸一下 nice啊 支持(0)反對(0) 回覆引用 #3樓[樓主] 2017-12-19 20:21 你是風兒 @ 回眸一下 多謝 支持(0)反對(0) 回覆引用 #4樓[樓主] 2017-12-19 20:22 你是風兒 @ esileme 多多指教 支持(0)反對(0) 回覆引用 #5樓 2018-05-29 16:37 山中小樓夜聽雨 多謝樓主 支持(0)反對(0) 回覆引用 #6樓 2018-08-15 09:10 雲中鵟 很贊同樓主結尾的話! 支持(0)反對(0) 回覆引用 #7樓 2018-10-30 10:37 於寶柱 好全 支持(0)反對(0) 回覆引用 #8樓 2018-11-28 10:16 稻香今天更新文章了嗎 感謝大佬, 很強大 支持(0)反對(0) 回覆引用 #9樓 2018-12-07 12:09 wizard_Q 沒有嵌套的方法嗎 支持(0)反對(0) 回覆引用 #10樓 2018-12-10 15:22 flyduan 深度好文,詳細明瞭.點個贊! 支持(0)反對(0) 刷新評論刷新頁面返回頂部 發表評論 暱稱: 王星辰宇 評論內容:引用 粗體 連接 縮進 代碼 圖片 退出 訂閱評論 [Ctrl+Enter快捷鍵提交] 【推薦】超50萬VC++源碼: 大型組態工控、電力仿真CAD與GIS源碼庫! 【活動】華爲雲12.12會員節全場1折起 滿額送Mate20 【活動】華爲雲會員節雲服務特惠1折起 【推薦】服務器100%基準CPU性能,1核1G首年168元,限時特惠! 騰訊雲1129 最新新聞: · 子彈都打不碎的玻璃,爲什麼用手輕輕一碰就碎了? · TARS斬獲2018年最佳原創開源軟件獎 · 新西蘭火箭創企發射成功,將13顆微型衛星送入軌道 · 途歌迴應「退押金難」:退款需20+7個工做日 將縮短週期 · 嘲笑那塊屏幕的人,根本不懂中國的窮孩子須要什麼 » 更多新聞... 暱稱:你是風兒 園齡:2年3個月 粉絲:54 關注:2 +加關注 < 2018年12月 > 日 一 二 三 四 五 六 25 26 27 28 29 30 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 1 2 3 4 5 搜索 經常使用連接 個人隨筆 個人評論 個人參與 最新評論 個人標籤 個人標籤 BeanUtils(1) HttpServletRequest(1) 隨筆分類 Ajax(4) JSON(6) mysql(5) spring(9) 多線程(1) 其它(2) 前端技術(1) 數據結構和算法(1) 隨筆檔案 2018年4月 (1) 2017年12月 (1) 2017年7月 (1) 2017年4月 (1) 2017年3月 (5) 2017年2月 (15) 2017年1月 (5) 最新評論 1. Re:FastJson對於JSON格式字符串、JSON對象及JavaBean之間的相互轉換 深度好文,詳細明瞭.點個贊! --flyduan 2. Re:FastJson對於JSON格式字符串、JSON對象及JavaBean之間的相互轉換 沒有嵌套的方法嗎 --wizard_Q 3. Re:FastJson對於JSON格式字符串、JSON對象及JavaBean之間的相互轉換 感謝大佬, 很強大 --稻香今天更新文章了嗎 4. Re:mysql(1)—— 詳解一條sql語句的執行過程 看完第一段,我的感受把DBMS比喻成「java中接口的實現類」更貼切一些 --夜藍沙 5. Re:mysql(4)—— 錶鏈接查詢與where後使用子查詢的性能分析。 我跟樓主有些類似,不過我是有個小毛病,就是我寫的代碼必須徹底在個人掌控以內,每個環節怎麼運行的,流程怎麼走的,我必須所有知道,不然我就不會繼續寫,直到我弄明白爲止。不過我比樓主幸運,咱們公司項目開發...... --夜藍沙 閱讀排行榜 1. FastJson對於JSON格式字符串、JSON對象及JavaBean之間的相互轉換(192800) 2. 詳解Ajax請求(四)——多個異步請求的執行順序(21983) 3. JSON(二)——JavaScript中js對象與JSON格式字符串的相互轉換(18465) 4. 詳解get請求和post請求參數中文亂碼的解決辦法(17131) 5. 使用getParameterMap()方法實現對請求參數的封裝的工具類(10888) 評論排行榜 1. FastJson對於JSON格式字符串、JSON對象及JavaBean之間的相互轉換(10) 2. mysql(1)—— 詳解一條sql語句的執行過程(7) 3. mysql(4)—— 錶鏈接查詢與where後使用子查詢的性能分析。(4) 4. 使用getParameterMap()方法實現對請求參數的封裝的工具類(1) 5. 詳解Ajax請求(四)——多個異步請求的執行順序(1) 推薦排行榜 1. FastJson對於JSON格式字符串、JSON對象及JavaBean之間的相互轉換(17) 2. mysql(4)—— 錶鏈接查詢與where後使用子查詢的性能分析。(4) 3. mysql(2)—— 由笛卡爾積現象分析數據庫表的鏈接(3) 4. 詳解Ajax請求(四)——多個異步請求的執行順序(3) 5. 快速排序算法(2) Copyright ©2018 你是風兒