晉江網(wǎng)站建設(shè)公司網(wǎng)絡(luò)營(yíng)銷(xiāo)推廣方案怎么寫(xiě)
一、JSON介紹
Android應(yīng)用程序界面上的數(shù)據(jù)信息大部分都是通過(guò)網(wǎng)絡(luò)請(qǐng)求從服務(wù)器上獲取到的,獲取到的數(shù)據(jù)類型常見(jiàn)的就是JSON。JSON是一種新的數(shù)據(jù)格式,這種格式的數(shù)據(jù)不可以直接顯示到程序的界面上,需要將該數(shù)據(jù)解析為一個(gè)集合或?qū)ο蟮男问讲趴梢燥@示到界面上。JSON的全稱為JavaScript Obiect Notation,JSON表示一種輕量級(jí)的數(shù)據(jù)交互格式,它是基于JavaScript的一個(gè)子集,采用完全獨(dú)立于編程語(yǔ)言的文本格式來(lái)存儲(chǔ)和表示數(shù)據(jù)。簡(jiǎn)潔和清晰的層次結(jié)構(gòu)使得JSON成為理想的數(shù)據(jù)交換語(yǔ)言,而且USON數(shù)據(jù)易于閱讀和編寫(xiě),同時(shí)也易于機(jī)器解析和生成,能夠有效地提升網(wǎng)絡(luò)的傳輸效率。
初學(xué)者可以使用JSON傳輸一個(gè)簡(jiǎn)單的數(shù)據(jù),如String、Number、Boolean類型的數(shù)據(jù),也可以傳輸一個(gè)數(shù)組或者一個(gè)復(fù)雜的Object對(duì)象。
JSOU數(shù)據(jù)有兩種表示結(jié)構(gòu),對(duì)象結(jié)構(gòu)和數(shù)組結(jié)構(gòu)。
1.對(duì)象結(jié)構(gòu)
對(duì)象結(jié)構(gòu)的JSON數(shù)據(jù)以" { "開(kāi)始,以" } "結(jié)束。中間部分由以“?,?“分隔的鍵值對(duì) (?key : value )構(gòu)成最后一個(gè)鍵值對(duì)后邊不用加" ,?"、鍵(keg)和值(value)之間以" : "分隔。
基本語(yǔ)法格式:
{"key1": value1,"key2": value2,"key3": value3,... ...
}
?例:
{"city": "北京","street": "xiSanQi","number": 100096,"inWest":true
}
2.數(shù)組結(jié)構(gòu)
數(shù)組結(jié)構(gòu)的ISON數(shù)據(jù)以" [ "開(kāi)始,以" ] "結(jié)束。中間部分由0個(gè)或多個(gè)以" , "分隔的對(duì)象(value)的列表組成。
基本語(yǔ)法格式:
[value1,value2,value3,... ...
]
例:
(1)
["abc",123,true,null
]
(2)
本數(shù)組結(jié)構(gòu)JSON中含兩個(gè)對(duì)象結(jié)構(gòu)JSON
[{"name": "王欣","sex": "女"},{"name": "王梓","sex": "女"}
]
(3)
本數(shù)組結(jié)構(gòu)JSON中含兩個(gè)對(duì)象結(jié)構(gòu)JSON,對(duì)象結(jié)構(gòu)JSON中含一個(gè)數(shù)組結(jié)構(gòu)JSON
[{"name": "王欣","sex": "女","hobby": ["籃球","音樂(lè)","足球"]},{"name": "王梓","sex": "女","hobby": ["電影","游泳","羽毛球"]}
]
二、JSON解析
假設(shè)有兩條JSON數(shù)據(jù),json1和json2
json1: { "name":"張三" , "age":27 , "married":true }
json2: [ { "name":"李四" , "age":25 } , { "name":"王五" , "age":20 } ]
1.使用JSONObject類與JSONArray類解析JSON數(shù)據(jù)
(1)使用JSONObject類解析對(duì)象結(jié)構(gòu)JSON數(shù)據(jù)
使用方法 new JSONObject( " 字符串型JSON?"?)?獲取JSONObject對(duì)象,然后使用optXXX(String valueName)方法獲取JSON所含值。
//根據(jù)字符串型的JSON信息獲取JSONObject
JSONObject jsonObject=new JSONObject( "json1(字符串類型)" );
//獲取內(nèi)容值
String jsonName=jsonObject.optString("name");
int jsonAge=jsonObject.optInt("age");
boolean jsonMarried=jsonObject.optBoolean("married");
(2)使用JSONArray類解析數(shù)組結(jié)構(gòu)JSON數(shù)據(jù)
使用方法 new JSONArray( " 字符串型JSON?"?)?獲取JSONArray對(duì)象,然后使用getJSONObject(int index)方法獲取JSONObject對(duì)象,然后使用optXXX(String valueName)方法獲取JSON所含值。
//根據(jù)字符串型的JSON信息獲取JSONArray
JSONArray jsonArray=new JSONArray( "json2(字符串類型)" );
//獲取數(shù)組結(jié)構(gòu)JSON中所含的各個(gè)對(duì)象結(jié)構(gòu)JSON
for (int i=0;i<jsonArray.length();i++){//獲取當(dāng)前指針的JSONObject jsonObject=jsonArray.getJSONArray(i);//獲取內(nèi)容值對(duì)象結(jié)構(gòu)JSONString jsonName=jsonObject.optString("name");int jsonAge=jsonObject.optInt("age");
}
以上兩個(gè)類在解析JSON數(shù)據(jù)時(shí)用到了optString()方法,optInt()方法,optBoolean()方法,這些方法在解析數(shù)據(jù)結(jié)構(gòu)是安全的,如果對(duì)應(yīng)的字段不存在,這些方法會(huì)有默認(rèn)的返回值。
2.使用GSON庫(kù)解析JSON數(shù)據(jù)
Google公司提供了一個(gè)Gson庫(kù)用于解析JSON數(shù)據(jù),使用前需將其添加到項(xiàng)目中。
使用Gson前要?jiǎng)?chuàng)建JOSN數(shù)據(jù)對(duì)應(yīng)的實(shí)體類,實(shí)體類中的成員名稱必須與JSON數(shù)據(jù)中key值一致。
例:
//自定義類
class Person{private String name;private int age;private boolean married;public String getName() {return name;}public int getAge() {return age;}public boolean getMarried() {return married;}public void setName(String name) {this.name = name;}public void setAge(int age) {this.age = age;}public void setMarried(boolean married) {this.married = married;}
}
(1)解析對(duì)象結(jié)構(gòu)JSON
創(chuàng)建Gson對(duì)象;然后使用Gson類.fromJSON()方法,創(chuàng)建自定義類Person對(duì)象。
//創(chuàng)建Gson對(duì)象
Gson gson=new Gson();
//使用Gson類.fromJSON()方法,創(chuàng)建自定義類Person對(duì)象
Person1 person1=gson.fromJSON( "json1(字符串類型)" , Person.class );
?(2)解析數(shù)組結(jié)構(gòu)JSON(其中包含對(duì)象結(jié)構(gòu)JSON)
創(chuàng)建Gson對(duì)象;使用new TypeToken<List<自定義類>>(){}.getType() (類型代幣)創(chuàng)建Type對(duì)象;然后使用Gson類.fromJSON()方法,創(chuàng)建自定義類的List集合(List<Person>)。
//創(chuàng)建Gson對(duì)象
Gson gson=new Gson();
//創(chuàng)建Type對(duì)象
Type listType=new TypeToken<List<Person>>(){}.getType();
//使用Gson類.fromJSON()方法,創(chuàng)建自定義類的List集合(List<Person>)
List<Person> list=gson.formJSON( "json2(字符串類型)" , listType );
三、獲取JSONObject、JSONArray對(duì)象
1.文件中獲取
可使用輸入流與StringBuilder配合,依靠StringBuilder生成完整的字符串型JSON數(shù)據(jù)。
//創(chuàng)建文件輸入流
InputStream inputStream=openFileInput(" ~ .json");
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream));
//創(chuàng)建字符串構(gòu)建器
StringBuilder stringBuilder=new StringBuilder();
while (true){String tempStr=bufferedReader.readLine();if(tempStr!=null){stringBuilder.append(tempStr);}else {break;}
}
//字符串構(gòu)建器創(chuàng)建字符串
String jsonString=stringBuilder.toString();//生成JSONObject或JSONArray對(duì)象
JSONObject jsonObject=new JSONObject(jsonString);
JSONArray jsonArray=new JSONArray(jsonString);
2.服務(wù)器返回?cái)?shù)據(jù)中獲取
多數(shù)服務(wù)器返回JSON數(shù)據(jù)
//Response(響應(yīng))為服務(wù)器返回
Response response;
//獲取ResponseBody
ResponseBody responseBody=response.body();
String jsonString=responseBody.toString();
//生成JSONObject或JSONArray對(duì)象
JSONObject jsonObject=new JSONObject(jsonString);
JSONArray jsonArray=new JSONArray(jsonString);
四、創(chuàng)建JSON數(shù)據(jù)
1.創(chuàng)建 .json 文件
main -> [new] -> [ Folder?] -> [Assets Folder] -> main -> assets -> [new] -> [File] 文件后綴為.json
2.程序中創(chuàng)建 JSONObject / JSONArray
//創(chuàng)建JSONObject
JSONObject jsonObject=new JSONObject();
jsonObject.put("id","1");
jsonObject.put("name","王欣");//創(chuàng)建JSONArray
JSONArray jsonArray=new JSONArray();
jsonArray.put("王欣");
jsonArray.put("王梓");