溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

關(guān)于Json數(shù)據(jù)的手動(dòng)解析

發(fā)布時(shí)間:2020-07-28 19:28:05 來源:網(wǎng)絡(luò) 閱讀:976 作者:IT學(xué)無止境 欄目:移動(dòng)開發(fā)

    前幾天做項(xiàng)目遇到了個(gè)關(guān)于服務(wù)器返回的JSONObject解析的問題,想記錄一下。

    關(guān)于Json的解析一般用2種方法,第一是下載GSON的JAR包,采用GSON解析,這種解析雖然方便使用,但是對(duì)于一些特殊格式的Json字符串是行不通的。而且JavaBean也寫不出來。先上圖:

關(guān)于Json數(shù)據(jù)的手動(dòng)解析

對(duì)于這樣的對(duì)象包對(duì)象的形式,不適合寫傳統(tǒng)的JavaBean,需要采用手動(dòng)解析的形式。手動(dòng)解析非常強(qiáng)大,基本可以對(duì)各種格式的Json字符串進(jìn)行解析。

下面是我解析的類:

public class OriginalRankBean {
    public String author;
    public String play;
    public String pic;
    public String title;
    public String video_review;

    public List<OriginalRankBean> parse(JSONObject obj) {
        if (obj == null) {
            return null;
        }
        List<OriginalRankBean> datalist=new ArrayList<OriginalRankBean>();
            obj = obj.optJSONObject("list");

           for (int i = 0; i <obj.length(); i++) {
                if(obj.has(i+"")){
                    OriginalRankBean rank = new OriginalRankBean();
                    JSONObject optJSONObject = obj.optJSONObject(i + "");
                    rank.author = optJSONObject.optString("author");
                    rank.play = optJSONObject.optString("comment");
                    rank.pic = optJSONObject.optString("pic");
                    rank.title = optJSONObject.optString("title");
                    rank.video_review = optJSONObject.optString("video_review");
                    datalist.add(rank);
                }
            }
        return datalist;

    }

}

在手動(dòng)解析的javaBean中寫入方法,通過調(diào)用方法,直接返回一個(gè)集合。在外面進(jìn)行方法的調(diào)用并傳入JSONObject,再創(chuàng)建一個(gè)集合進(jìn)行接收就可以了。

注意:這里用opt可以防止報(bào)異常,因?yàn)閛pt內(nèi)部已經(jīng)做了判斷了,而使用get的形式需要拋異常。

在解析過程中,只拿自己需要的數(shù)據(jù)就可以了。

注意上來先判空,如果請求回來的JSONObject是空的話,那就沒必要解析了,直接return,去檢查url和請求網(wǎng)絡(luò)的方法是否出現(xiàn)了問題。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI