調用第三方接口,返回一堆json,我只想取得里面的某一個屬性,但是返回的比較復雜,無法直接拿到屬性,格式類似於這樣:
{"video":{"id":"29BA6ACE7A9427489C33DC5901307461","title":"體驗課01","desp":"","tags":" ","duration":503,"category":"07AD1E11DBE6FDFC","image":"http://2.img.bokecc.com/comimage/0DD1F081022C163E/2016-03-09/29BA6ACE7A9427489C33DC5901307461-0.jpg","imageindex":0,"image-alternate":[{"index":0,"url":"http://2.img.bokecc.com/comimage/0DD1F081022C163E/2016-03-09/29BA6ACE7A9427489C33DC5901307461-0/0.jpg"},{"index":1,"url":"http://2.img.bokecc.com/comimage/0DD1F081022C163E/2016-03-09/29BA6ACE7A9427489C33DC5901307461-0/1.jpg"},{"index":2,"url":"http://2.img.bokecc.com/comimage/0DD1F081022C163E/2016-03-09/29BA6ACE7A9427489C33DC5901307461-0/2.jpg"},{"index":3,"url":"http://2.img.bokecc.com/comimage/0DD1F081022C163E/2016-03-09/29BA6ACE7A9427489C33DC5901307461-0/3.jpg"}]}}
其實我想獲得“duration”這個屬性,在網上搜索如何解析復雜json,五花八門,用什么技術的都有,但是都只用一種技術,依我看,幾種技術組合起來用才是效率最高
這里的jsonObject用的是net.sf.json.JSONObject,jar包為json-lib-2.2.2-jdk13.jar;Gson所用到的jar包為gson-2.3.1.jar,其中json-lib-2.2.2-jdk13.jar不能單獨使用,必須配合其他jar
下面代碼為JSONObject與Gson的組合使用獲取“duration”屬性,將服務器返回的json作為參數傳入即可
//解析json數據
public static int parseJson(String str){
JSONObject jObj = JSONObject.fromObject(str);
Object obj=jObj.getJSONObject("video");
String s2=obj.toString();
Gson gson=new Gson();
Map map=gson.fromJson(s2, Map.class);
Number num=(Number)map.get("duration");
return num.intValue();
}
如果你想解析json里面的嵌套json數組,解決方法可參考這篇博客(http://blog.csdn.net/lhfeng/article/details/7398880)
在這里還有一個問題要提一下,由於duration屬性是double類型的,取出來數值是503.0,我不想帶小數點,所以我直接在下划線部分這樣寫
Integer num=(Integer)map.get("duration");
結果報錯了,報java.lang.Double cannot be cast to java.lang.Integer ,Integer屬於不可更改類型,而且Double和Integer沒有任何繼承關系,當然不能這樣轉換。
注:java.lang.Number是Integer,Double的父類,所以要寫成樣 Number num=(Number)map.get("duration");最后再num.intValue()就可以去掉小數點了
這個錯誤可參考這篇博客(http://blog.sina.com.cn/s/blog_794d4bfd0102uz4i.html)
