之前发过一篇开发新浪微博的文章,对于大家比较感兴趣的内容之一便是如何解析新浪微博的JSON。
其实一开始的时候,也遇过一些挫折,比如直接用JsonArray和JsonObject去解析JSON内容的话,是解析不了的。
因为JSON的格式比较固定,像新浪微博返回的JSON内容则是多了一个中括号及statues标签,如下:
我的目标就是先去掉以上红色字体的内容,这个比较容易实现。//将获取到的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解析了。