导读:
如何解析新浪微博的JSON,对于数据抓取的同学可能比较感兴趣:
思路如下:
1.首先获取json
2.处理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解析了。
|