android 解析新浪微博json數據

 從新浪微博服務器獲取到了好友微博的json數據後如何去解析着實讓我費了一番功夫。因爲返回的json數據格式比較複雜。下面我就通過代碼說明一下如何來解析新浪微博的json數據。先來看一下從服務器端返回的json數據:

{
    "statuses": [
        {
            "created_at": "Thu Aug 13 18:03:49 +0800 2015",
            "id": 3875439447865330,
            "mid": "3875439447865330",
            "idstr": "3875439447865330",
            "text": "9種美味炒飯的做法。吃貨們get起來!",
            "source_allowclick": 0,
            "source_type": 1,
            "source": "<a href=\"http://weibo.com/\" rel=\"nofollow\">微博 weibo.com</a>",
            "favorited": false,
            "truncated": false,
            "in_reply_to_status_id": "",
            "in_reply_to_user_id": "",
            "in_reply_to_screen_name": "",
            "pic_urls": [
                {
                    "thumbnail_pic": "http://ww4.sinaimg.cn/thumbnail/005G0GAnjw1euzovt1b1qj30c80cjt9p.jpg"
                },
                {
                    "thumbnail_pic": "http://ww3.sinaimg.cn/thumbnail/005G0GAnjw1euzovta9jxj30c80dmq4l.jpg"
                },
                {
                    "thumbnail_pic": "http://ww2.sinaimg.cn/thumbnail/005G0GAnjw1euzovtayy3j30c80ed0u3.jpg"
                },
                {
                    "thumbnail_pic": "http://ww3.sinaimg.cn/thumbnail/005G0GAnjw1euzovtdy2rj30c80fiq4g.jpg"
                },
                {
                    "thumbnail_pic": "http://ww2.sinaimg.cn/thumbnail/005G0GAnjw1euzovtnzt9j30c80fcwg0.jpg"
                },
                {
                    "thumbnail_pic": "http://ww3.sinaimg.cn/thumbnail/005G0GAnjw1euzovtr54tj30c80erabn.jpg"
                },
                {
                    "thumbnail_pic": "http://ww1.sinaimg.cn/thumbnail/005G0GAnjw1euzovtvg1wj30c80h9jt3.jpg"
                },
                {
                    "thumbnail_pic": "http://ww3.sinaimg.cn/thumbnail/005G0GAnjw1euzovu0wv0j30c80cgq3v.jpg"
                },
                {
                    "thumbnail_pic": "http://ww1.sinaimg.cn/thumbnail/005G0GAnjw1euzovu7r4cj30c80f875y.jpg"
                }
            ],
            "thumbnail_pic": "http://ww4.sinaimg.cn/thumbnail/005G0GAnjw1euzovt1b1qj30c80cjt9p.jpg",
            "bmiddle_pic": "http://ww4.sinaimg.cn/bmiddle/005G0GAnjw1euzovt1b1qj30c80cjt9p.jpg",
            "original_pic": "http://ww4.sinaimg.cn/large/005G0GAnjw1euzovt1b1qj30c80cjt9p.jpg",
            "geo": null,
            "user": {
                "id": 3613440743,
                "idstr": "3613440743",
                "class": 1,
                "screen_name": "吃貨頻道",
                "name": "吃貨頻道",
                "province": "82",
                "city": "2",
                "location": "澳門 花地瑪堂區",
                "description": "蒐羅全球各地美食,吃貨請關注",
                "url": "",
                "profile_image_url": "http://tp4.sinaimg.cn/3613440743/50/5725083848/0",
                "profile_url": "u/3613440743",
                "domain": "",
                "weihao": "",
                "gender": "f",
                "followers_count": 1601744,
                "friends_count": 110,
                "pagefriends_count": 10,
                "statuses_count": 32255,
                "favourites_count": 2,
                "created_at": "Sun Sep 22 00:01:10 +0800 2013",
                "following": true,
                "allow_all_act_msg": false,
                "geo_enabled": true,
                "verified": true,
                "verified_type": 0,
                "remark": "",
                "ptype": 0,
                "allow_all_comment": true,
                "avatar_large": "http://tp4.sinaimg.cn/3613440743/180/5725083848/0",
                "avatar_hd": "http://ww4.sinaimg.cn/crop.0.29.370.370.1024/d760bae7jw1erk48zdmxyj20ac0b5q3o.jpg",
                "verified_reason": "知名美食資訊博主",
                "verified_trade": "1153",
                "verified_reason_url": "",
                "verified_source": "",
                "verified_source_url": "",
                "verified_state": 0,
                "verified_level": 3,
                "verified_reason_modified": "",
                "verified_contact_name": "",
                "verified_contact_email": "",
                "verified_contact_mobile": "",
                "follow_me": false,
                "online_status": 0,
                "bi_followers_count": 0,
                "lang": "zh-cn",
                "star": 0,
                "mbtype": 2,
                "mbrank": 1,
                "block_word": 0,
                "block_app": 0,
                "credit_score": 80,
                "user_ability": 0,
                "urank": 13
            },
            "reposts_count": 5,
            "comments_count": 0,
            "attitudes_count": 8,
            "mlevel": 0,
            "visible": {
                "type": 0,
                "list_id": 0
            },
            "darwin_tags": [],
            "rid": "0_0_1_2666872050318022253"
        },
        {
            "created_at": "Thu Aug 13 18:02:32 +0800 2015",
            "id": 3875439128973390,
            "mid": "3875439128973390",
            "idstr": "3875439128973390",
            "text": "在綠水漫堤的陽朔,無論騎行 、漫步、順水漂流還是什麼都不做,都能讓你找到契合的釋放點,再者,追隨劉三姐歌聲,或停於古鎮,聞三花,嘗桂香。",
            "source_allowclick": 0,
            ......
由於json數據很長,所以我只貼出了bufe。下面上代碼

package com.lql.json;

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

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.lql.bean.Status;
import com.lql.bean.User;

public class WeiboJsonTools {

	/**
	 * 解析微博json數據
	 * 
	 * 
	 * @param jsonString
	 * @return
	 */
	public static List<Status> parseJsonToStatus(String jsonString) {
		List<Status> weibos = new ArrayList<Status>();

		JSONObject jsonObject;
		try {
			jsonObject = new JSONObject(jsonString);
			JSONArray jsonArray = jsonObject.getJSONArray("statuses");//取得statuses後的JSONObject數組

			//遍歷jsonObject數組
			for (int i = 0; i < jsonArray.length(); i++) {
				Status weibo = new Status();//創建一個微博對象
				JSONObject jo = jsonArray.getJSONObject(i);
				String weibo_create_at = jo.getString("created_at");// 微博創建時間
				long weibo_id = jo.getLong("id");// 微博ID
				String text = jo.getString("text");// 微博內容
				String source = jo.getString("source");// 微博來源
				int reposts_count = jo.getInt("reposts_count");// 轉發數
				int comments_count = jo.getInt("comments_count");// 評論數
				int attitudes_count = jo.getInt("attitudes_count");
				Boolean favorited = jo.getBoolean("favorited");// 是否已被收藏
				
				boolean isHaveImage = false;// 標誌該微博是否配圖
				List<String> pic_urls = new ArrayList<String>();//微博配圖可能有多張,我將其存入集合中

				JSONArray jsonArray2 = jo.getJSONArray("pic_urls");// 獲取圖片地址
				for (int j = 0; j < jsonArray2.length(); j++) {
					isHaveImage = true;
					JSONObject jsonObject2 = jsonArray2.getJSONObject(j);
					String thumbnail_pic = jsonObject2
							.getString("thumbnail_pic");
					pic_urls.add(thumbnail_pic);
				}
				weibo.setId(weibo_id);
				weibo.setCreated_at(weibo_create_at);
				weibo.setText(text);
				weibo.setSource(source);
				weibo.setComments_count(comments_count);
				weibo.setReposts_count(reposts_count);
				weibo.setAttitudes_count(attitudes_count);
				weibo.setFavorited(favorited);
				weibo.setHaveImage(isHaveImage);
				weibo.setPic_urls(pic_urls);

				JSONObject jo2 = jo.getJSONObject("user");// 獲取weibojson中的UserjsonObject
				User user = new User();
				long id = jo2.getLong("id");// 發表該微博的用戶ID
				String user_name = jo2.getString("screen_name");// 用戶名
				String location = jo2.getString("location");// 用戶所在地
				String description = jo2.getString("description");// 用戶個人描述
				String profile_image_url = jo2.getString("profile_image_url");// 用戶頭像地址
				String profile_url = jo2.getString("profile_url");// 用戶微博統一訪問地址
				int statuses_count = jo2.getInt("statuses_count");// 用戶微博數
				String gender = jo2.getString("gender");// 性別,m:男、f:女、n:未知
				int followers_count = jo2.getInt("followers_count");// 粉絲數
				int friends_count = jo2.getInt("friends_count");// 好友數
				int favourites_count = jo2.getInt("favourites_count");// 收藏數
				String created_at = jo2.getString("created_at");// 用戶創建(註冊)時間
				boolean geo_enabled = jo2.getBoolean("geo_enabled");// 是否允許顯示地理信息
				boolean allow_all_comment = jo2.getBoolean("allow_all_comment");// 是否允許所有人對我的微博進行評論,true:是,false:否
				String avatar_large = jo2.getString("avatar_large");// 用戶頭像地址(大圖),180×180像素
				String avatar_hd = jo2.getString("avatar_hd");// 用戶高清頭像
				int online_status = jo2.getInt("online_status");// 用戶的在線狀態,0:不在線、1:在線
				user.setScreen_name(user_name);
				user.setAllow_all_comment(allow_all_comment);
				user.setId(id);
				user.setLocation(location);
				user.setDescription(description);
				user.setProfile_image_url(profile_image_url);
				user.setProfile_url(profile_url);
				user.setStatuses_count(statuses_count);
				user.setFollowers_count(followers_count);
				user.setGender(gender);
				user.setFriends_count(friends_count);
				user.setFavourites_count(favourites_count);
				user.setCreated_at(created_at);
				user.setGeo_enabled(geo_enabled);
				user.setAllow_all_comment(allow_all_comment);
				user.setAvatar_hd(avatar_hd);
				user.setAvatar_large(avatar_large);
				user.setOnline_status(online_status);
				weibo.setUser(user);
				weibos.add(weibo);
			}
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return weibos;
	}
}

代碼中的註釋已經說說的很詳細了,我採用的是android自帶的JSON解析API,不用額外導入jar包,否則會報錯。

下面是微博類Status和用戶類User

package com.lql.bean;

import java.util.List;

/**
 * 微博類
 * 
 * @author Administrator
 * 
 */
public class Status {

	@Override
	public String toString() {
		return "Status [created_at=" + created_at + ", id=" + id + ", text="
				+ text + ", source=" + source + ", favorited=" + favorited
				+ ", thumbnail_pic=" + thumbnail_pic + ", user=" + user
				+ ", reposts_count=" + reposts_count + ", comments_count="
				+ comments_count + ", visible=" + visible + ", isHaveImage="
				+ isHaveImage + ", pic_urls=" + pic_urls + "]";
	}

	/**
	 * 微博創建時間
	 */
	private String created_at;


	/**
	 * 微博ID
	 */
	private long id;

	/**
	 * 微博內容
	 */
	private String text;

	/**
	 * 微博來源
	 */
	private String source;

	/**
	 * 是否已收藏,true:是,false:否
	 */
	private boolean favorited;

	/**
	 * 縮略圖片地址,沒有時不返回此字段
	 */
	private String thumbnail_pic;

	/**
	 * 微博作者的用戶信息字段
	 */
	private User user;

	/**
	 * 轉發數
	 */
	private int reposts_count;

	public String getCreated_at() {
		return created_at;
	}

	public void setCreated_at(String created_at) {
		this.created_at = created_at;
	}

	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public String getText() {
		return text;
	}

	public void setText(String text) {
		this.text = text;
	}

	public String getSource() {
		return source;
	}

	public void setSource(String source) {
		this.source = source;
	}

	public boolean isFavorited() {
		return favorited;
	}

	public void setFavorited(boolean favorited) {
		this.favorited = favorited;
	}

	public String getThumbnail_pic() {
		return thumbnail_pic;
	}

	public void setThumbnail_pic(String thumbnail_pic) {
		this.thumbnail_pic = thumbnail_pic;
	}

	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}

	public int getReposts_count() {
		return reposts_count;
	}

	public void setReposts_count(int reposts_count) {
		this.reposts_count = reposts_count;
	}

	public int getComments_count() {
		return comments_count;
	}

	public void setComments_count(int comments_count) {
		this.comments_count = comments_count;
	}

	public Object getVisible() {
		return visible;
	}

	public void setVisible(Object visible) {
		this.visible = visible;
	}

	public boolean isHaveImage() {
		return isHaveImage;
	}

	public void setHaveImage(boolean isHaveImage) {
		this.isHaveImage = isHaveImage;
	}

	public List<String> getPic_urls() {
		return pic_urls;
	}

	public void setPic_urls(List<String> pic_urls) {
		this.pic_urls = pic_urls;
	}

	/**
	 * 評論數
	 */
	private int comments_count;
	
	/**
	 * 點贊數
	 */
	private int attitudes_count;

	public int getAttitudes_count() {
		return attitudes_count;
	}

	public void setAttitudes_count(int attitudes_count) {
		this.attitudes_count = attitudes_count;
	}

	/**
	 * 微博的可見性及指定可見分組信息。該object中type取值,0:普通微博,1:私密微博,3:指定分組微博,4:密友微博;
	 * list_id爲分組的組號
	 */
	private Object visible;
	
	/**
	 * 微博是否有配圖,true有    false:沒有
	 */
	private boolean isHaveImage;
	
	List<String> pic_urls;

}

package com.lql.bean;

import android.graphics.Bitmap;

public class User {

	
	@Override
	public String toString() {
		return "User [id=" + id + ", screen_name=" + screen_name
				+ ", location=" + location + ", description=" + description
				+ ", profile_image_url=" + profile_image_url + ", profile_url="
				+ profile_url + ", statuses_count=" + statuses_count
				+ ", gender=" + gender + ", followers_count=" + followers_count
				+ ", friends_count=" + friends_count + ", favourites_count="
				+ favourites_count + ", created_at=" + created_at
				+ ", geo_enabled=" + geo_enabled + ", allow_all_comment="
				+ allow_all_comment + ", avatar_large=" + avatar_large
				+ ", avatar_hd=" + avatar_hd + ", online_status="
				+ online_status + ", bi_followers_count=" + bi_followers_count
				+ "]";
	}
	
	/**
	 * 用戶UID
	 */
	private long id;

	/**
	 * 用戶暱稱
	 */
	private String screen_name;

	/**
	 * 用戶所在地
	 */
	private String location;

	/**
	 * 用戶個人描述
	 */
	private String description;

	/**
	 * 用戶頭像地址(中圖),50×50像素
	 */
	private String profile_image_url;

	/**
	 * 用戶的微博統一URL地址
	 */
	private String profile_url;
	
	/**
	 * 用戶微博數
	 */
	private int statuses_count;

	

	public int getStatuses_count() {
		return statuses_count;
	}

	public void setStatuses_count(int statuses_count) {
		this.statuses_count = statuses_count;
	}

	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public String getScreen_name() {
		return screen_name;
	}

	public void setScreen_name(String screen_name) {
		this.screen_name = screen_name;
	}

	public String getLocation() {
		return location;
	}

	public void setLocation(String location) {
		this.location = location;
	}

	public String getDescription() {
		return description;
	}

	public void setDescription(String description) {
		this.description = description;
	}

	public String getProfile_image_url() {
		return profile_image_url;
	}

	public void setProfile_image_url(String profile_image_url) {
		this.profile_image_url = profile_image_url;
	}

	public String getProfile_url() {
		return profile_url;
	}

	public void setProfile_url(String profile_url) {
		this.profile_url = profile_url;
	}

	public String getGender() {
		return gender;
	}

	public void setGender(String gender) {
		this.gender = gender;
	}

	public int getFollowers_count() {
		return followers_count;
	}

	public void setFollowers_count(int followers_count) {
		this.followers_count = followers_count;
	}

	public int getFriends_count() {
		return friends_count;
	}

	public void setFriends_count(int friends_count) {
		this.friends_count = friends_count;
	}

	public int getFavourites_count() {
		return favourites_count;
	}

	public void setFavourites_count(int favourites_count) {
		this.favourites_count = favourites_count;
	}

	public String getCreated_at() {
		return created_at;
	}

	public void setCreated_at(String created_at) {
		this.created_at = created_at;
	}

	public boolean isGeo_enabled() {
		return geo_enabled;
	}

	public void setGeo_enabled(boolean geo_enabled) {
		this.geo_enabled = geo_enabled;
	}

	public boolean isAllow_all_comment() {
		return allow_all_comment;
	}

	public void setAllow_all_comment(boolean allow_all_comment) {
		this.allow_all_comment = allow_all_comment;
	}

	public String getAvatar_large() {
		return avatar_large;
	}

	public void setAvatar_large(String avatar_large) {
		this.avatar_large = avatar_large;
	}

	public String getAvatar_hd() {
		return avatar_hd;
	}

	public void setAvatar_hd(String avatar_hd) {
		this.avatar_hd = avatar_hd;
	}

	public int getOnline_status() {
		return online_status;
	}

	public void setOnline_status(int online_status) {
		this.online_status = online_status;
	}

	public int getBi_followers_count() {
		return bi_followers_count;
	}

	public void setBi_followers_count(int bi_followers_count) {
		this.bi_followers_count = bi_followers_count;
	}

	/**
	 * 性別,m:男、f:女、n:未知
	 */
	private String gender;

	/**
	 * 粉絲數
	 */
	private int followers_count;

	/**
	 * 關注數
	 */
	private int friends_count;

	/**
	 * 收藏數
	 */
	private int favourites_count;

	/**
	 * 用戶創建(註冊)時間
	 */
	private String created_at;

	/**
	 * 是否允許標識用戶的地理位置,true:是,false:否
	 */
	private boolean geo_enabled;

	/**
	 * 是否允許所有人對我的微博進行評論,true:是,false:否
	 */
	private boolean allow_all_comment;

	/**
	 * 用戶頭像地址(大圖),180×180像素
	 */
	private String avatar_large;

	/**
	 * 用戶頭像地址(高清),高清頭像原圖
	 */
	private String avatar_hd;

	/**
	 * 用戶的在線狀態,0:不在線、1:在線
	 */
	private int online_status;

}

這兩個類我只寫了對我有用的字段。

主要就這些了。



發佈了41 篇原創文章 · 獲贊 9 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章