1. 程式人生 > >fastjson處理json

fastjson處理json

返回主頁 你是風兒
部落格園首頁新隨筆聯絡訂閱管理
隨筆 - 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 你是風兒