1. 程式人生 > >Android資料傳輸格式(基於JSON格式)

Android資料傳輸格式(基於JSON格式)

        在進行App開發時,我們通常都要與伺服器進行資料的傳輸,上一篇部落格,我寫到了與伺服器進行互動的方法,資料可以傳輸到伺服器,也可以從伺服器上獲取資料。這篇我們講進行傳輸資料時的格式。

    當我們傳輸的資料非常少時,比如一個數據(名字,年齡,性別等),這樣伺服器獲得後,或者是app獲得後,資料比較清楚,容易進行操作。但如果傳輸的資料非常的多時,對於資料的處理,就變得麻煩,並且不好操作,不易閱讀。所以JSON格式的資料傳輸就誕生了。JSON的具體含義自己百度一下就可以了。

 這篇我只寫Android端的JSON封裝和解析

 1 JSON 資料的格式(具體例子,一般來說有以下四種樣式)

  1.1 單獨一個JSON(帶有key值):         

<span style="font-size:18px;">{
   "Person" :
        {
       "name":"jackon",                                                          
       "age" : 13,
       "sex" : "nan"
        }
     
}</span>
 Person 就是這個json的key值也叫做識別符號

  1.2 JSON陣列(帶有key值):

<span style="font-size:18px;">{
    "students":
      [ 
         { "name":"jackson","age":100},
       
         { "name":"daniel","age":123}
      ]
}</span>
students就是這個JSON的key值,也就是識別符號

 1.3 單獨一個JSON(不帶有Key值)     

<span style="font-size:18px;">{                                               

   "name":"jackon",                                                          
   "age" : 13,
   "sex" : "nan"

}</span>
1.4 JSON陣列(不帶有key值)
<span style="font-size:18px;">[

   { "name" : "jackson", "age": 100},
    
   { "name" : "daniel" , "age" :34}

]</span>

2 Android端JSON資料的封裝

       在Android端使用JSON時,不需要引入JSON包,Android系統自帶有JSON包 ,以下分別為四種JSON樣式的封裝和解析方法,我已函式的形式給出

2.1 符合1.1的JSON資料格式的封裝和解析

      封裝函式 

<span style="font-size:18px;">   //封裝單獨JSON(帶有key值)
	      public  String   createJson() throws JSONException{
	    	   
	    	          String   json;
	    	          JSONObject   jsonobject = new JSONObject();
	    	          JSONObject   jsontostring = new JSONObject();
	    	          jsonobject.put("name", "小明");
	    	          jsonobject.put("sex", "男");
	    	          jsonobject.put("age", 25);
	    	          jsontostring.put("Person", jsonobject);     //給整體json前加上一個key值
	    	          Log.i(TAG, jsontostring.toString());
	    	          return  jsontostring.toString();
	    	     
	      }</span>
 結果 :  {"Person":{"sex":"男","age":25,"name":"小明"}}    

  解析函式

<span style="font-size:18px;"><span style="font-size:18px;">//解析單獨JSON(帶有key值)
	public  void    analysejsonkey(String jsonstring) throws JSONException{

		   JSONObject  jsonobject  = new JSONObject(jsonstring);  //獲得整體的json字串
		   JSONObject  json  = jsonobject.getJSONObject("Person"); //獲得key所帶有的value值
		   String  name  = json.getString("name");
		   String  sex  =  json.getString("sex");
		   int  age = json.getInt("age");
		   Log.i(TAG, name + sex + age);
		
	}</span></span>

結果 :小明男25

2.2 符合1.2的JSON資料格式的封裝和解析

      封裝函式

<span style="font-size:18px;"> //封裝JSON陣列(帶有key值)
	         public  String   createJsons() throws JSONException{
	        	     
	    	          JSONArray     jsonarray   = new JSONArray();
	    	          JSONObject   jsontostring = new JSONObject();
	    	          for(int i = 0 ; i < 5 ;i++){     //封裝5個json,構成一個數組
	    	         JSONObject   jsonobject = new JSONObject();  
	    	          jsonobject.put("name", "小明" + i);
	    	          jsonobject.put("sex", "男" + i );
	    	          jsonobject.put("age", 25 + i);
	    	          jsonarray.put(jsonobject);
	    	          }
	    	          jsontostring.put("Person", jsonarray);     //給整體json前加上一個key值
	    	          Log.i(TAG, jsontostring.toString());
	    	          return  jsontostring.toString();
	         }</span>
 結果 : {"Person":[{"sex":"男0","age":25,"name":"小明0"},{"sex":"男1","age":26,"name":"小明1"},{"sex":"男2","age":27,"name":"小明2"},{"sex":"男3","age":28,"name":"小明3"},{"sex":"男4","age":29,"name":"小明4"}]}

 解析函式

<span style="font-size:18px;">//解析JSON陣列(帶有key值)
	public  void    analysejsonskey(String jsonstring) throws JSONException{
          JSONObject  jsonobject = new JSONObject(jsonstring);
          JSONArray   jsonarray = jsonobject.getJSONArray("Person");           //獲得key所帶有的value值
          for(int i = 0;i < jsonarray.length(); i++){
		    	 JSONObject   jsonobject2 =  jsonarray.getJSONObject(i);      //json陣列中有多個json物件
		         String name  =   jsonobject2.getString("name");
		         String sex  = jsonobject2.getString("sex");
		          int age  =  jsonobject2.getInt("age");
		          Log.i(TAG, name + sex + age);
		     }
          
	}</span>

結果 :小明0男025 小明1男126 小明2男227 小明3男328 小明4男429

2.3 符合1.3的JSON資料格式的封裝和解析

      封裝函式

<span style="font-size:18px;">//封裝單獨JSON(不帶有key值)
	         public  String   createJsonnokey() throws JSONException{
		    	   
   	          String   json;
   	          JSONObject   jsonobject = new JSONObject();
   	          JSONObject   jsontostring = new JSONObject();
   	          jsonobject.put("name", "小明");
   	          jsonobject.put("sex", "男");
   	          jsonobject.put("age", 25);
   	          Log.i(TAG, jsonobject.toString());
   	          return jsonobject.toString();
   	     
     }</span>
 結果 :{"sex":"男","age":25,"name":"小明"}   

   解析函式

<span style="font-size:18px;">	//解析單獨JSON(不帶有key值)
	public  void    analysejsonnokey(String jsonstring) throws JSONException{
             JSONObject  json = new JSONObject(jsonstring);
             String  name  = json.getString("name");
  		     String  sex  =  json.getString("sex");
  		     int  age = json.getInt("age");
  		     Log.i(TAG, name + sex + age);
	}</span>

結果 :小明男25

2.4 符合1.4的JSON資料格式的封裝和解析

      封裝函式

<span style="font-size:18px;"> //封裝JSON陣列(不帶有key值)
	         public  String   createJsonsnokey() throws JSONException{
	        	      String   json;
	    	          JSONArray     jsonarray   = new JSONArray();
	    	          JSONObject   jsontostring = new JSONObject();
	    	          for(int i = 0 ; i < 5 ;i++){     //封裝5個json,構成一個數組
	    	         JSONObject   jsonobject = new JSONObject();  
	    	          jsonobject.put("name", "小明" + i);
	    	          jsonobject.put("sex", "男" + i );
	    	          jsonobject.put("age", 25 + i);
	    	          jsonarray.put(jsonobject);
	    	          }
	    	      Log.i(TAG, jsonarray.toString());
	    	      return  jsonarray.toString();
	         }
	   </span>
 結果 :[{"sex":"男0","age":25,"name":"小明0"},{"sex":"男1","age":26,"name":"小明1"},{"sex":"男2","age":27,"name":"小明2"},{"sex":"男3","age":28,"name":"小明3"},{"sex":"男4","age":29,"name":"小明4"}]

  解析函式

<span style="font-size:18px;">//解析JSON陣列(不帶有key值)
	public  void    analysejsonsnokey(String jsonstring) throws JSONException{
                   
		    JSONArray  jsonarray =  new JSONArray(jsonstring);
		    for(int i = 0 ; i < jsonarray.length(); i ++){
		    	String s = String.valueOf(jsonarray.get(i));
		    	JSONObject  jsonobject = new JSONObject(s);
		    	 String  name  = jsonobject.getString("name");
	  		     String  sex  =  jsonobject.getString("sex");
	  		     int  age = jsonobject.getInt("age");
	  		     Log.i(TAG, name + sex + age); 
		    }
</span>

結果 :小明0男025 小明1男126 小明2男227 小明3男328 小明4男429

以上就是分別對四種json資料格式的封裝和解析,親測可以使用。哪裡有錯,還請大家多多提醒,希望共同學習。