在进行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
封装函数
<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数据格式的封装和解析,亲测可以使用。哪里有错,还请大家多多提醒,希望共同学习。源代码地址:http://download.csdn.net/detail/danielntz/9503438