1. 程式人生 > >阿里巴巴之fastjson的簡單總結

阿里巴巴之fastjson的簡單總結

        今日,公司由於要求寫一個SDK打成jar包,便於以後直接呼叫,因為介面引數要求是json格式的,所以做完之後在這裡就總結一下,和各位道友分享。

        首先,我這裡使用的json工具是阿里巴巴的fastjson,maven依賴在這裡:

 <dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.47</version>
</dependency>


        其實,平時json的使用也就兩種,1資料轉json;    2.json解析成資料。

        由於說明都在程式碼中,所以各位道友只管盡情的享受閱讀程式碼的快感即可。


        第一:資料轉json:

package com.google.fastJson;

import com.alibaba.fastjson.JSON;

import java.util.HashMap;
import java.util.Map;

/**
 * 將資料轉換為json資料,使用"JSON.toJSONString(Object obj)"方法;
 */
public class Demo01 {

    public static void main(String[] args){

        /**
         * 注意比較下面兩種json資料格式:一種是"{}"形式,另一種是"[{},{}]"的
         * 我們可以這樣理解:json的標準資料格式是"{key:value}"的形式.
         * key,value為json的基礎元素,{}將基礎元素封裝成一個物件,[{},{},...]是將這些物件封裝成一個數組;
         */
        String json01=test01();
        System.out.println(json01);//{"name":"zhangsan","age":14}

        String json02=test02();
        System.out.println(json02);//[{"name":"zhangsan","age":11},{"address":"新疆","tel":"13056897412"}]
    }


    public static String test01(){
        Map<String,Object> map=new HashMap<>();
        map.put("name","zhangsan");
        map.put("age",14);
        String jsonStr=JSON.toJSONString(map);
        return jsonStr;
    }


    public static String test02(){

        Object[] obj=new Object[2];

        Map<String,Object> map1=new HashMap<>();
        map1.put("name","zhangsan");
        map1.put("age",11);

        Map<String,Object> map2=new HashMap<>();
        map2.put("address","新疆");
        map2.put("tel","13056897412");

        obj[0]=map1;
        obj[1]=map2;

        String jsonStr=JSON.toJSONString(obj);

        return jsonStr;
    }
}

       第二:解析json資料:

package com.google.fastJson;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

/**
 * 之前講了將資料轉換為json格式,這裡講如何從json資料中獲取資料,即為逆過程。分三種情況:
 */

public class Demo02 {

    public static void main(String[] args){

        test01(); //結果:年齡=zhangsan,年齡=12

        test02(); //姓名=zhangsan,年齡=11,愛好=null   姓名=null,年齡=null,愛好=soccer



        //name=zhaoyun
        //age=666
        //schoolName=家裡蹲
        //schoolCode=110
        //mathTecherName=劉備
        //mathTeacherAge=54
        //englishTeacherName=關羽
        //mathTeacherAge=110
        test03();

    }

    /**
     * 第一種情況:簡單物件型別:如"{"name":"zhangsan","age":12}"
     */
    public static void test01(){

        //定義一個json字串:
        String jsonStr="{\"name\":\"zhangsan\",\"age\":12}"; //這裡的\"表示轉義字元;

        //使用JSON.parseObject(String str)將字串解析為json物件:
        JSONObject jo=JSON.parseObject(jsonStr);
        String name=jo.getString("name");
        int age=jo.getInteger("age");
        System.out.println("年齡="+name+",年齡="+age);

    }


    /**
     * 第二種情況:陣列型別:如:
     *  [{"name":"zhangsan","age":11},{"like":"soccer"}]
     */
    public static void test02(){

        //定義一個json字串:
        String jsonStr="[{\"name\":\"zhangsan\",\"age\":11},{\"like\":\"soccer\"}]";

        //使用JSON.parseArray(String str)解析陣列型別的json資料:
        JSONArray ja=JSON.parseArray(jsonStr); //返回的實際上是一個list容器

        //遍歷這個容器
        for(int i=0;i<ja.size();i++){
            JSONObject jo=ja.getJSONObject(i);
            System.out.println("姓名="+jo.getString("name")+",年齡="+jo.getInteger("age")+",愛好="+jo.getString("like"));
        }

        //或者使用foreach遍歷也可以:
        for(Object obj:ja){
            JSONObject jo=(JSONObject)obj;
            System.out.println("姓名="+jo.getString("name")+",年齡="+jo.getInteger("age")+",愛好="+jo.getString("like"));
        }
    }

    /**
     * 第三種情況:比較複雜的json資料格式:例如:
     * {
     *    "name":"zhaoyun",
     *    "age":666,
     *    "school":{
     *              "schoolName":"家裡蹲",
     *              "schoolCode":110
     *             },
     *    "teacher":[
     *                {
     *                 "mathTecherName":"劉備",
     *                 "mathTeacherAge":54
     *                },
     *                {
     *                 "englishTeacherName":"關羽",
     *                 "englishTeacherAge":110
     *                }
     *            ]
     * }
     *
     */
    public static void test03(){
        String jsonStr="{\"name\":\"zhaoyun\",\"age\":666,\"school\":{\"schoolName\":\"家裡蹲\",\"schoolCode\":\"110\"},\"teacher\":[{\"mathTecherName\":\"劉備\",\"mathTeacherAge\":54},{\"englishTeacherName\":\"關羽\",\"englishTeacherAge\":110}]}";
        JSONObject jo=JSON.parseObject(jsonStr);

        String name=jo.getString("name");
        int age=jo.getInteger("age");
        System.out.println("name="+name);
        System.out.println("age="+age);

        //這一步注意了:
        JSONObject jo2=jo.getJSONObject("school");
        String schoolName=jo2.getString("schoolName");
        int schoolCode=jo2.getInteger("schoolCode");
        System.out.println("schoolName="+schoolName);
        System.out.println("schoolCode="+schoolCode);

        //這一步更要注意了:
        JSONArray ja=jo.getJSONArray("teacher");
        for(int i=0;i<ja.size();i++){
            JSONObject jo3=ja.getJSONObject(i);
            if(i==0){
                String mathTecherName=jo3.getString("mathTecherName");
                int mathTeacherAge=jo3.getInteger("mathTeacherAge");
                System.out.println("mathTecherName="+mathTecherName);
                System.out.println("mathTeacherAge="+mathTeacherAge);
            }
            if(i==1){
                String englishTeacherName=jo3.getString("englishTeacherName");
                int englishTeacherAge=jo3.getInteger("englishTeacherAge");
                System.out.println("englishTeacherName="+englishTeacherName);
                System.out.println("mathTeacherAge="+englishTeacherAge);
            }
        }

    }
}