解析新浪微博JSON

之前发过一篇开发新浪微博的文章,对于大家比较感兴趣的内容之一便是如何解析新浪微博的JSON。

其实一开始的时候,也遇过一些挫折,比如直接用JsonArray和JsonObject去解析JSON内容的话,是解析不了的。

因为JSON的格式比较固定,像新浪微博返回的JSON内容则是多了一个中括号及statues标签,如下:

{
    "statuses": [
        {
            "created_at": "Tue May 31 17:46:55 +0800 2011",
            "id": 11488058246,
            "text": "求关注。",
            "source": "<a href="http://weibo.com" rel="nofollow">新浪微博</a>",
            "favorited": false,
            "truncated": false,
            "in_reply_to_status_id": "",
            "in_reply_to_user_id": "",
            "in_reply_to_screen_name": "",
            "geo": null,
            "mid": "5612814510546515491",
            "reposts_count": 8,
            "comments_count": 9,
            "annotations": [],
            "user": {
                "id": 1404376560,
                "screen_name": "zaku",
                "name": "zaku",
                "province": "11",
                "city": "5",
                "location": "北京 朝阳区",
                "description": "人生五十年,乃如梦如幻;有生斯有死,壮士复何憾。",
                "url": "http://blog.sina.com.cn/zaku",
                "profile_image_url": "http://tp1.sinaimg.cn/1404376560/50/0/1",
                "domain": "zaku",
                "gender": "m",
                "followers_count": 1204,
                "friends_count": 447,
                "statuses_count": 2908,
                "favourites_count": 0,
                "created_at": "Fri Aug 28 00:00:00 +0800 2009",
                "following": false,
                "allow_all_act_msg": false,
                "remark": "",
                "geo_enabled": true,
                "verified": false,
                "allow_all_comment": true,
                "avatar_large": "http://tp1.sinaimg.cn/1404376560/180/0/1",
                "verified_reason": "",
                "follow_me": false,
                "online_status": 0,
                "bi_followers_count": 215
            }
        },
        ...
    ],
    "previous_cursor": 0,                    // 暂未支持
    "next_cursor": 11488013766,     // 暂未支持
    "total_number": 81655
}
我的目标就是先去掉以上红色字体的内容,这个比较容易实现。

//将获取到的json内容变成可以正常解析的文本
	public static String parseJsonText(String jtext){
		
		char leftSymbol='[';
		char rightSymbol=']';
		String result="";
		for(int i=0;i<jtext.length();i++){
			
			if(leftSymbol==jtext.charAt(i)){
				result=jtext.substring(i,jtext.length());
				break;
			}
		}
		
		for(int i=result.length();i>0;i--){
			
			if(rightSymbol==result.charAt(i-1)){
				result=result.substring(0, i);
				break;
			}
		}
		return result;
		
	}
处理完就可以直接用JsonArray和JsonObject来解析相关的内容了。

第二步就是实现一个List<HashMap<String,String>>,用于填充ListView。

下面的方法返回一个List<HashMap<String,String>>,并在其中解析JSON内容。

private List<HashMap<String, String>> listview(String rlt) {

		String result = ParseJson.parseJsonText(rlt);
		try {
			JSONArray jsonArrays = new JSONArray(result);
			for (int i = 0; i < jsonArrays.length(); i++) {
				JSONObject jsonObject = jsonArrays.getJSONObject(i);

				HashMap<String, String> map = new HashMap<String, String>();
				// 获得微博的ID
				String ID = jsonObject.getString("id");
				contentId.add(ID);
				// 获得微博内容
				String text = jsonObject.getString("text");
				// 获得微博来源
				String source = jsonObject.getString("source");
				// 获得微博的发表时间
				String created_at = jsonObject.getString("created_at");
				// 生成user的可用JSON对象
				JSONObject userJson = jsonObject.getJSONObject("user");
				// 获得发表微博的用户名
				String username = userJson.getString("name");

				map.put("text", text);
				map.put("name", username);
				map.put("source", "来自" + "【" + source + "】");
				map.put("created_at", ParseJson.getFormatTime(created_at));

				if (jsonObject.has("retweeted_status")) {
					JSONObject retweetedJson = jsonObject
							.getJSONObject("retweeted_status");
					// 获得转发微博的内容
					String retweetedText = retweetedJson.getString("text");
					map.put("retweetedText", retweetedText);
					JSONObject retWeetedUserNameJson = retweetedJson
							.getJSONObject("user");
					// 获得转发微博内容的用户名
					String retweetedContent = retWeetedUserNameJson
							.getString("name");
					map.put("retweetedContent", retweetedContent + ":"
							+ retweetedText);
				}
				listArrays.add(map);
			}

		} catch (JSONException e) {
			// TODO Auto-generated catch block
			System.out.println(e.getMessage());
		}

		return listArrays;

	}

通过上面两步就可以实现基本的微博JSON解析了。


  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值