Android資料傳輸格式(基於JSON格式)
阿新 • • 發佈:2018-12-31
在進行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值):
students就是這個JSON的key值,也就是識別符號<span style="font-size:18px;">{ "students": [ { "name":"jackson","age":100}, { "name":"daniel","age":123} ] }</span>
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
封裝函式
<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資料格式的封裝和解析,親測可以使用。哪裡有錯,還請大家多多提醒,希望共同學習。