1. 程式人生 > >5分鐘讓你學會用最高效的工具解析所有Json

5分鐘讓你學會用最高效的工具解析所有Json

如果你是一個Android開發工程師,學會解析Json字串是你的必修課,本篇文章主要以例項的方式手把手教你怎麼做,花五分鐘時間閱讀本篇文章你就可以學會解析所有的Json字串啦。

準備:

  • json字串
  • fastjson
  • HiJson格式化json工具

開始教程:

  • fastjson:

    常用工作中解析json的工具類有谷歌的GSON,jackson,fastjson,這裡就不做一一比較了,博主告訴大家,fastjson就是最高效最好用的,選它就沒錯了。FastJson出自阿里工程師之手,是一個Json處理工具包,包括“序列化”和“反序列化”兩部分,它具備如下特徵:

    • 速度最快,測試表明,fastjson具有極快的效能,超越任其他的Java Json parser。包括自稱最快的JackJson,是GSON解析速度的6倍;

    • 功能強大,完全支援Java Bean、集合、Map、日期、Enum,支援範型,支援自省;無依賴,能夠直接執行在Java SE 5.0以上版本;支援Android;開源 (Apache 2.0)

    下載地址:

    [fastjson jar包下載地址](http://download.csdn.net/detail/pdsyzbaozi/8199419)
  • HiJson:

    HiJson是一個將 json 字串格式化的工具,非常好用,讓你的json字串結構一目瞭然,並且可以直接複製鍵值,強烈推薦!


    HiJson格式化json

    下載地址:

Fastjson API入口類是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON類上的靜態方法直接完成。

public static final Object parse(String text); // 把JSON文字parse為JSONObject或者JSONArray 
public static final JSONObject parseObject(String text)// 把JSON文字parse成JSONObject    
public static final  T parseObject(String text, Class clazz); // 把JSON文字parse為JavaBean 
public static final JSONArray parseArray(String text)
; // 把JSON文字parse成JSONArray public static final List parseArray(String text, Class clazz); //把JSON文字parse成JavaBean集合 public static final String toJSONString(Object object); // 將JavaBean序列化為JSON文字 public static final String toJSONString(Object object, boolean prettyFormat); // 將JavaBean序列化為帶格式的JSON文字 public static final Object toJSON(Object javaObject); 將JavaBean轉換為JSONObject或者JSONArray。

如果你從沒解析過json,看不太明白沒關係,現在我上面那個json字串,手把手的教你怎麼解析,學會解析這個較複雜的json串,相信其他的你也肯定也會解析了。

json串提供給大家拿去練手

{
    "status": "2000",
    "msg": "Successful!",
    "data": [{
        "details": [{
            "distance": 2847,
            "nextLat": 39.994076,
            "nextLong": 116.47764,
            "nexti": "MeloDev",
            "status": 4
        }],
        "distance": 2847,
        "imageUrl": "",
        "overview": "長期原創Android部落格",
        "source": "http://www.jianshu.com/users/f5909165c1e8/latest_articles",
        "status": "SUCCESSFUL"
    }, {
        "details": [{
            "distance": 2769,
            "nextLat": 39.97691,
            "nextLong": 116.46019,
            "nexti": "MeloDev",
            "status": 4
        }],
        "distance": 2769,
        "imageUrl": "",
        "overview": "喜歡請加關注",
        "source": "http://www.jianshu.com/users/f5909165c1e8/latest_articles",
        "status": "SUCCESSFUL"
    }]
}

好的萬事俱備,馬上就開始!

把下載的fastjson的兩個jar包匯入libs目錄下:


匯入fastjson的jar包

現在開始比較關鍵的一步,新建一個bean物件,去作為json解析之後的載體,程式碼如下:

public class QueryResultInfo {
    public String status;
    public String msg;
    public List<DataList> data;

    public class DataList {
        public int distance;
        public String imageUrl;
        public String overview;
        public String source;
        public String status;
        public List<DetailsList> details;

        @Override
        public String toString() {
            return "DataList [distance=" + distance + ", imageUrl=" + imageUrl + ", overview=" + overview + ", source=" + source + ", status=" + status + ", details=" + details.toString() + "]";
        }

        public class DetailsList {
            public int distance;
            public double nextLat;
            public double nextLong;
            public String nexti;
            public int status;

            @Override
            public String toString() {
                return "DetailsList [distance=" + distance + ", nextLat=" + nextLat + ", nextLong=" + nextLong + ", nexti=" + nexti + ", status=" + status + "]";
            }
        }
    }

    @Override
    public String toString() {
        return "QueryResultInfo [status=" + status + ", msg=" + msg + ", data=" + data.toString() + "]";
    }

}

我來告訴大家,寫一個解析json之後bean物件的技巧。首先觀察json格式化的結果(HiJson工具右側檢視),java程式碼中:

  • 資料的型別、鍵的名稱都必須與json字串保證一一對應
    也就是例子中,每個變數都是以json的鍵名稱命名的,不能寫錯,而且資料型別也必須對應,String就是String,int就是int,float就是float

  • 如果出現巢狀的陣列,就寫一個內部類,用同樣的方式命名各個json欄位,用List接收它,注意List的命名也得是用json中的鍵名。多層巢狀以此類推。

  • 所有變數的訪問域都是public的。

好了bean物件就完成了。

我把json字串存在了String.xml下,點選按鈕之後,解析json字串,layout檔案很簡單,這裡就不放出了。


MainActivity

可以看到,我們呼叫JSON.parseObject(myJson,AppInfo.class)這一行程式碼,我們就把json字串的所有資訊都解析到了appInfo物件中,想用什麼就直接取出來就可以了。

這個json字串相對還是複雜的,多層巢狀,所以這個你都會了,簡單的你也肯定沒問題了,當然fastjson的強大不止於此,如果有特殊需要,再慢慢發掘吧~!



文/MeloDev(簡書作者)
原文連結:http://www.jianshu.com/p/4cab1e59befb
著作權歸作者所有,轉載請聯絡作者獲得授權,並標註“簡書作者”。