1. 程式人生 > >json資料解析

json資料解析

[{"name":"音箱狂歡",imgUrl":"http://7mno4h.com2.z0.glb.qiniucdn.com/5608f3b5Nc8d90151.jpg","type":1},{"name":"手機國慶禮","imgUrl":"http://7mno4h.com2.z0.glb.qiniucdn.com/5608eb8cN9b9a0a39.jpg","type":1}]

// 解析json方式:遇到{}就用JsonObject, 遇到[]就用JsonArray    如果json資料最外層是[]不是{} 用gson.jar解析就需要注意了

. 在使用Gson解析json字串的時候,怎麼建立JavaBean 是非常關鍵的。要注意一下三點, 

第一. 內部巢狀的類必須是static的,要不然解析會出錯。

第二. 類裡面的屬性名必須跟json欄位裡面的key是一模一樣的。

第三. 內部巢狀的用[], 括起來的部分是一個List, 所以定義為public List<B> b. 而只用{}巢狀的就定義為public C c;

請看如下程式碼:

json字串 :  

String json = {       "a":"100",       "b":[{"b1":"b_value1","b2":"b_value2"},             {"b1":"b_value1","b2":"b_value2"}],     "c": {"c1":"c_value1","c2":"c_value2"}       }

方式一:原生解析法
ArrayList<> mBanners = new ArrayList<>();
   try {   
 	     JSONArray jsonArray = new JSONArray(string);   
 	   for (int i = 0; i < jsonArray.length(); i++) {      
  	    JSONObject jsonObject = jsonArray.getJSONObject(i);     
   	    BannerBean bean = new BannerBean();       
 	    bean.imgUrl = jsonObject.getString("imgUrl");    
   	    bean.name = jsonObject.getString("name");      
  	     mBanners.add(bean);      
          }
      } catch (JSONException e) {    
          e.printStackTrace();
    }
方式二:gson.jar解析法
Gson gson = new Gson();
Type listType = new TypeToken<List<BannerBean2>>() {}.getType();
ArrayList<BannerBean2> list = gson.fromJson(string, listType);
for (int i = 0; i < list.size(); i++) {
    BannerBean2 bannerBean2 = new BannerBean2();
bannerBean2.name = list.get(i).name;
Log.i(TAG, "name>>" + bannerBean2.name);
}
for (BannerBean2 bean2 : list) {
    Log.i(TAG, "name=====>>" + bean2.name);
BannerBean2 b2= new BannerBean2();
b2.name = bean2.name;
Log.i(TAG, "name=====>>" + b2.name);
}



Type listType2 = new TypeToken<LinkedList<BannerBean2>>() {}.getType();
LinkedList<BannerBean2> list2 = gson.fromJson(string, listType2);
for (Iterator iterator = list2.iterator(); iterator.hasNext(); ) {
    BannerBean2 bean2 = (BannerBean2) iterator.next();
Log.i(TAG, "bean2name>>" + bean2.name);
}
public class BannerBean2 {
        public  String name;
        public  String imgUrl;
}


Gson解析json,單獨以及陣列  這樣的json資料,String myjson 如下: [{"id":"3","title":"\u56fe\u72473","pic":"\/Uploads\/201311\/5281ef5bdb576.jpg","lang":"1"},{"id":"2","title":"\u56fe\u72472","pic":"\/Uploads\/201402\/52fb27b0f08b0.jpg","lang":"1"},{"id":"1","title":"\u56fe\u72471","pic":"\/Uploads\/201402\/52fb27d992890.jpg","lang":"1"}] 先建一個model: package com.zztt.model; public class ImageInfo {  private String id;  private String title;  private String pic;    private String lang;  public String getId() {   return id;  }  public void setId(String id) {   this.id = id;  }  public String getTitle() {   return title;  }  public void setTitle(String title) {   this.title = title;  }  public String getPic() {   return pic;  }  public void setPic(String pic) {   this.pic = pic;  }  public String getLang() {   return lang;  }  public void setLang(String lang) {   this.lang = lang;  }   }   然後,導包,不要倒錯了   import java.lang.reflect.Type; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; 單個的這樣: Gson gson = new Gson(); ImageInfo imageInfo = gson .fromJson(myjson, ImageInfo.class); 陣列這樣: Type listType = new TypeToken<ArrayList<ImageInfo>>() {      }.getType();      Gson gson = new Gson();      ArrayList<ImageInfo> imageInfo = gson.fromJson(myjson, listType);