1. 程式人生 > >最簡單簡潔高效的Json數據解析

最簡單簡潔高效的Json數據解析

scrip 評論 mar example .get settag i++ ref 填充

一.無圖無真相
技術分享
技術分享
二.主要代碼
1.導入jar包

拷貝fastjson.jar包到projectlibs包下

2.封裝工具類JsonUtil.java

package com.example.parsejsondemo;

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

import java.util.List;

/**
 * Json解析的工具類
 * 
 * @author
孤狼 * @since 2015-8-8 */
public class JsonUtil { /** * 將JSON轉成 數組類型對象 * * @param json * @param clazz * @param <T> * @return */ public static <T> List<T> getListFromString(String json, Class<T> clazz) { List<T> t = null; try
{ t = JSON.parseArray(json, clazz); } catch (Exception e) { e.printStackTrace(); } return t; } /** * 將list轉換成String * * @param list * 準備轉換的集合 * @return string * @throws Exception */ public static
String getStringFromList(List list) { String string = ""; try { string = JSON.toJSONString(list, true); } catch (Exception e) { e.printStackTrace(); } return string; } /** * 將java對象轉換成json字符串 * * @param obj * 準備轉換的對象 * @return json字符串 * @throws Exception */ public static String getStringFromObject(Object obj) { String json = ""; try { json = JSON.toJSONString(obj, true); } catch (Exception e) { e.printStackTrace(); } return json; } /** * 將json字符串轉換成java對象 * * @param json * @param clazz * @param <T> * @return object */ public static <T> T getObjectFromString(String json, Class<T> clazz) { T t = null; try { t = JSON.parseObject(json, clazz); } catch (Exception e) { e.printStackTrace(); } return t; } /** * 將 json 字符串轉為 JSONArray 對象; * * @param json * @return JsonArray */ public static JSONArray getJsonArray(String json) { JSONArray array = null; try { array = JSON.parseArray(json); } catch (Exception e) { e.printStackTrace(); } return array; } /** * 將 json 字符串轉為 JSONObect 對象 * * @param json * @return JSONObject */ public static JSONObject getJsonObject(String json) { JSONObject object = null; try { object = (JSONObject) JSON.parse(json); } catch (Exception e) { e.printStackTrace(); } return object; } }

3.封裝數據實體類(實例:ArticleBean.java和ArticleDetailBean.java)

package com.example.parsejsondemo;

import java.util.ArrayList;
import java.util.List;

/**
 * 文章實體類
 * 
 * @author 孤狼
 * @since 2015-8-8
 */
public class ArticleBean {

    private String title = "";
    private String title_image_url = "";
    private String create_time = "";
    private long article_id = 0;
    // 查看用戶的信息
    private List<UserInfoBean> headimages = new ArrayList<UserInfoBean>();

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getTitle_image_url() {
        return title_image_url;
    }

    public void setTitle_image_url(String title_image_url) {
        this.title_image_url = title_image_url;
    }

    public String getCreate_time() {
        return create_time;
    }

    public void setCreate_time(String create_time) {
        this.create_time = create_time;
    }

    public List<UserInfoBean> getHeadimages() {
        return headimages;
    }

    public void setHeadimages(List<UserInfoBean> headimages) {
        this.headimages = headimages;
    }

    public long getArticle_id() {
        return article_id;
    }

    public void setArticle_id(long article_id) {
        this.article_id = article_id;
    }
}
package com.example.parsejsondemo;

import java.util.ArrayList;
import java.util.List;

/**
 * 文章詳情
 * 
 * @author 孤狼
 * @since 2015-8-8
 */
public class ArticleDetailBean {

    private String content;
    // 圖片集合類
    private List<ImageResult> images = new ArrayList<ImageResult>();
    private String create_time;
    // 點贊狀態
    private boolean if_dianzan;
    // 評論數
    private int comment_num;
    // 第幾期 例:第5期
    private String times;
    private String title;
    private long article_id;
    private int dianzan_num;

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public String getCreate_time() {
        return create_time;
    }

    public void setCreate_time(String create_time) {
        this.create_time = create_time;
    }

    public boolean isIf_dianzan() {
        return if_dianzan;
    }

    public void setIf_dianzan(boolean if_dianzan) {
        this.if_dianzan = if_dianzan;
    }

    public int getComment_num() {
        return comment_num;
    }

    public void setComment_num(int comment_num) {
        this.comment_num = comment_num;
    }

    public String getTimes() {
        return times;
    }

    public void setTimes(String times) {
        this.times = times;
    }

    public long getArticle_id() {
        return article_id;
    }

    public void setArticle_id(long article_id) {
        this.article_id = article_id;
    }

    public int getDianzan_num() {
        return dianzan_num;
    }

    public void setDianzan_num(int dianzan_num) {
        this.dianzan_num = dianzan_num;
    }

    public List<ImageResult> getImages() {
        return images;
    }

    public void setImages(List<ImageResult> images) {
        this.images = images;
    }

    @Override
    public String toString() {
        return "ArticleDetailResult [title=" + title + ", content=" + content
                + ", create_time=" + create_time + ", comment_num="
                + comment_num + ", times=" + times + ", article_id="
                + article_id + ", dianzan_num=" + dianzan_num + "]";
    }

}

4.代碼中調用
a.解析 JsonList類型

package com.example.parsejsondemo;

import java.util.List;

import com.nostra13.universalimageloader.core.ImageLoader;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

/**
 * 解析 JsonList類型
 *
 * @author 孤狼
 * @since 2015-8-8
 * */
public class JsonListActivity extends Activity {
    private String data = "[ { \"article_id\": 682, \"create_time\": \"12:13\", \"headimages\": [], \"title\": \"給你的一封情書\", \"title_image_url\": \"http://e.hiphotos.baidu.com/image/w%3D310/sign=d0aa9ba85eb5c9ea62f305e2e538b622/b90e7bec54e736d1cb1f21ab9e504fc2d5626901.jpg\" }, { \"article_id\": 681, \"create_time\": \"12:13\", \"headimages\": [], \"title\": \"女人,你的別名是愚蠢\", \"title_image_url\": \"http://f.hiphotos.baidu.com/image/w%3D310/sign=ef8e5a82778b4710ce2ffbcdf3cfc3b2/72f082025aafa40f1ed46c7eae64034f78f01906.jpg\" }, { \"article_id\": 680, \"create_time\": \"12:13\", \"headimages\": [], \"title\": \"明確\", \"title_image_url\": \"http://g.hiphotos.baidu.com/image/w%3D310/sign=5c6d742fe4fe9925cb0c6f5104a95ee4/3ac79f3df8dcd100dce594cb768b4710b8122fda.jpg\" }, { \"article_id\": 679, \"create_time\": \"12:13\", \"headimages\": [], \"title\": \"秋之隨想\", \"title_image_url\": \"http://d.hiphotos.baidu.com/image/w%3D310/sign=f9fd8128e9c4b7453494b117fffd1e78/0bd162d9f2d3572ce2779bdd8813632762d0c31e.jpg\" }, { \"article_id\": 681, \"create_time\": \"12:13\", \"headimages\": [], \"title\": \"女人,你的別名是愚蠢\", \"title_image_url\": \"http://f.hiphotos.baidu.com/image/w%3D310/sign=ef8e5a82778b4710ce2ffbcdf3cfc3b2/72f082025aafa40f1ed46c7eae64034f78f01906.jpg\" }, { \"article_id\": 680, \"create_time\": \"12:13\", \"headimages\": [], \"title\": \"明確\", \"title_image_url\": \"http://g.hiphotos.baidu.com/image/w%3D310/sign=5c6d742fe4fe9925cb0c6f5104a95ee4/3ac79f3df8dcd100dce594cb768b4710b8122fda.jpg\" }, { \"article_id\": 679, \"create_time\": \"12:13\", \"headimages\": [], \"title\": \"秋之隨想\", \"title_image_url\": \"http://d.hiphotos.baidu.com/image/w%3D310/sign=f9fd8128e9c4b7453494b117fffd1e78/0bd162d9f2d3572ce2779bdd8813632762d0c31e.jpg\" }, { \"article_id\": 681, \"create_time\": \"12:13\", \"headimages\": [], \"title\": \"女人,你的別名是愚蠢\", \"title_image_url\": \"http://f.hiphotos.baidu.com/image/w%3D310/sign=ef8e5a82778b4710ce2ffbcdf3cfc3b2/72f082025aafa40f1ed46c7eae64034f78f01906.jpg\" }, { \"article_id\": 680, \"create_time\": \"12:13\", \"headimages\": [], \"title\": \"明確\", \"title_image_url\": \"http://g.hiphotos.baidu.com/image/w%3D310/sign=5c6d742fe4fe9925cb0c6f5104a95ee4/3ac79f3df8dcd100dce594cb768b4710b8122fda.jpg\" }, { \"article_id\": 679, \"create_time\": \"12:13\", \"headimages\": [], \"title\": \"秋之隨想\", \"title_image_url\": \"http://d.hiphotos.baidu.com/image/w%3D310/sign=f9fd8128e9c4b7453494b117fffd1e78/0bd162d9f2d3572ce2779bdd8813632762d0c31e.jpg\" }, { \"article_id\": 681, \"create_time\": \"12:13\", \"headimages\": [], \"title\": \"女人。你的別名是愚蠢\", \"title_image_url\": \"http://f.hiphotos.baidu.com/image/w%3D310/sign=ef8e5a82778b4710ce2ffbcdf3cfc3b2/72f082025aafa40f1ed46c7eae64034f78f01906.jpg\" }, { \"article_id\": 680, \"create_time\": \"12:13\", \"headimages\": [], \"title\": \"明確\", \"title_image_url\": \"http://g.hiphotos.baidu.com/image/w%3D310/sign=5c6d742fe4fe9925cb0c6f5104a95ee4/3ac79f3df8dcd100dce594cb768b4710b8122fda.jpg\" }, { \"article_id\": 679, \"create_time\": \"12:13\", \"headimages\": [], \"title\": \"秋之隨想\", \"title_image_url\": \"http://d.hiphotos.baidu.com/image/w%3D310/sign=f9fd8128e9c4b7453494b117fffd1e78/0bd162d9f2d3572ce2779bdd8813632762d0c31e.jpg\" } ]";
    private List<ArticleBean> list;
    private ListView listView;
    private ImageLoader instance;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        instance = ImageLoader.getInstance();
        listView = (ListView) findViewById(R.id.listView);
        // 把String類型的json解析成List集合
        list = JsonUtil.getListFromString(data, ArticleBean.class);
        // 設置適配器
        listView.setAdapter(new CustomAdapter());
        listView.setOnItemClickListener(new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                startActivity(new Intent(JsonListActivity.this,
                        JsonObjectActivity.class));
            }
        });
    }

    // 定義適配器
    class CustomAdapter extends BaseAdapter {

        @Override
        public int getCount() {
            return list.size();
        }

        @Override
        public Object getItem(int position) {
            return list.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // 查找控件
            ViewHold hold;
            if (convertView != null) {
                hold = (ViewHold) convertView.getTag();
            } else {
                hold = new ViewHold();
                convertView = View.inflate(getApplicationContext(),
                        R.layout.list_item, null);
                hold.iv_cover = (ImageView) convertView
                        .findViewById(R.id.iv_coner);
                hold.tv_time = (TextView) convertView
                        .findViewById(R.id.tv_time);
                hold.tv_title = (TextView) convertView
                        .findViewById(R.id.tv_title);
                convertView.setTag(hold);
            }
            // 填充數據
            hold.tv_time.setText("孤狼   公布時間:"
                    + list.get(position).getCreate_time());
            hold.tv_title.setText(list.get(position).getTitle());
            instance.displayImage(list.get(position).getTitle_image_url(),
                    hold.iv_cover);
            return convertView;
        }

        class ViewHold {
            private ImageView iv_cover;
            private TextView tv_title;
            private TextView tv_time;
        }
    }
}

b.解析 JsonObject類型

package com.example.parsejsondemo;

import com.nostra13.universalimageloader.core.ImageLoader;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ImageView;
import android.widget.TextView;

/**
 * 解析 JsonObject類型
 *
 * @author 孤狼
 * @since 2015-8-8
 * */
public class JsonObjectActivity extends Activity {
    // json數據
    private String data = "{ \"article_id\": 682, \"comment_num\": 26, \"content\": \"你是清晨,\\r\\n是我醒來後的第一縷,\\r\\n是我起床後的第一縷清風。\\r\\n是我看見的第一抹濃綠色。\\r\\n你是的陽光溫暖我的。\\r\\n你是中午,\\r\\n是手中香甜的飯菜。\\r\\n是我午睡時躺著的枕頭。

\\r\\n你是晚上,\\r\\n是黑中的一屢涼爽,\\r\\n是黑暗中的平靜心態,\\r\\n是驚恐中的心靈安慰。\\r\\n是天空中的閃爍繁星,\\r\\n你是我最遙遠的。\\r\\n我的戀人。

\\r\\n\", \"create_time\": \"06-12 12:13\", \"dianzan_num\": 411, \"if_dianzan\": true, \"images\": [ { \"image_id\": 3595, \"image_url\": \"http://e.hiphotos.baidu.com/image/w%3D310/sign=d0aa9ba85eb5c9ea62f305e2e538b622/b90e7bec54e736d1cb1f21ab9e504fc2d5626901.jpg\" }, { \"image_id\": 3596, \"image_url\": \"http://7xjora.com2.z0.glb.qiniucdn.com/644121332662Etjmn.jpg?imageView2/0/w/500/h/500\" }, { \"image_id\": 3597, \"image_url\": \"http://7xjora.com2.z0.glb.qiniucdn.com/1650121333675aY09a.jpg?imageView2/0/w/500/h/500\" }, { \"image_id\": 3598, \"image_url\": \"http://7xjora.com2.z0.glb.qiniucdn.com/120712133440245oBv.jpg?imageView2/0/w/500/h/500\" }, { \"image_id\": 3599, \"image_url\": \"http://7xjora.com2.z0.glb.qiniucdn.com/940121334941gy1Ii.jpg?

imageView2/0/w/500/h/500\" } ], \"times\": \"第682期\", \"title\": \"給你的一封情書\" }"; private ImageLoader instance; private TextView tv_title; private TextView tv_time; private ImageView iv_cover; private ArticleDetailBean detailBean; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_object); instance = ImageLoader.getInstance(); iv_cover = (ImageView) findViewById(R.id.iv_coner); tv_time = (TextView) findViewById(R.id.tv_time); tv_title = (TextView) findViewById(R.id.tv_title); // 把json數據解析成Object類型實體類 detailBean = JsonUtil .getObjectFromString(data, ArticleDetailBean.class); // 填充數據 tv_title.setText(detailBean.getTitle()); tv_time.setText(detailBean.getContent()); instance.displayImage(detailBean.getImages().get(0).getImage_url(), iv_cover); } }

三.說明

Json數據是client和服務端交互的主要形式之中的一個,解析Json的方法工具也非常多,比方goole的Gson(能夠去看前面關於Gson解析數據的方法)等等,而fastjson.jar解析json數據感覺非常強大高效和簡潔。有用非常easy:引入jar包—>封裝工具類—–>封裝要解析的數據對象—>調用工具解析。代碼非常easy。如有疑問請留言—-孤狼

四.實例Demo

最簡單高效簡潔好用的Json解析

最簡單簡潔高效的Json數據解析