Json for Java API學習
首先聲明:本文來個很多網友的部落格,我通過參考了他們的部落格,大致的瞭解了一些項目中常用的Json in java 類和方法,以及關於json的個人理解個人對json的一些簡單理解
在最近的學習中,查閱了很多資料,瞭解了一些關於json的基本知識,下面做一個簡單的總結:
json是什麼
沒有.json結尾的這種檔案,json(JavaScript Object Notation)是一種簡單的資料交換格式,在此之前我也不知道這個東西其實沒有想象的那麼抽象,看看後面的例子會更清晰
json中的資料結構
json中只有兩種資料基本結構,一種是MAP,或者叫對象,另一種是Array
1.Map
類似與java中的Map,這裡是以{開始,以}結束,內部object內容是索引值對的形勢,key:value,中間是:號隔開,不同的object之間用逗號隔開 比如:{name:hujie , age:21} 官方給的圖解:(http://www.json.org/)
2.Array
這個就類似於數組吧,所以很多時候我們都把json叫做就json數組, 這裡是以[開始的,以]結束的,中間的value用逗號隔開 比如:[value1 , value2 , value3]
官方的給的圖解是:
json數組中的value可以是很多種資料類型的值,官方給了如解
這裡的string,number等等我想是不需要多解釋了,誰實話,這些具體的定時,我能理解,可是沒法說出來。
知識點:
1.json並不難理解,簡單點理解就是一種資料交換的格式
2.json只有兩中結構,一種是object另一種是array,並且兩者可以相互嵌套,{}是對象,[]是數組
json與JavaScript的轉換
在javaScript中有一個動態指令碼執行函數:eval(),這是一個javaScript的全域對象 eval()函數只能接受原生態的字串作為參數,如果不是字串,則會原樣返回,否則會返回字串的計算結果(前提是得有結果,沒有結果返回null) eval()案例:
<script language=javascript type=text/javascript> alert(eval(x=10;y=10;x*y;));//100,當做js指令碼執行alert(eval(2+3));//5alert(eval(x+10));//20了var str={};//花括弧內沒屬性時alert(eval('(' + str + ')'));//彈出:[object Object]alert(eval(str));//彈出:undefinedstr={name:'hj'};//花括弧內有一個屬性alert(typeof eval('(' + str + ')'));//彈出:object,以對象方式返回alert(eval(str));//彈出:hjalert(eval('(' + str + ')').name);//彈出:hjalert(eval(str).name);//彈出:undefinedstr={name:'hj',age:21};//花括弧內有多個屬性時alert(eval('(' + str + ')'));//object對象alert(eval('(' + str + ')').name);//hjalert(eval('(' + str + ')').age);//21//alert(eval(str));//運行時會出錯,多個屬性時不用小括弧運行出錯//花括弧{}是用來聲明一個對象的,如果需要引用這個對象,那麼我們必須加上(),這樣才可以,因是聲明語句只能執行,並不能夠返回//用()括起來的目的是將聲明語句轉換成運算式,這樣就可以計算運算式的值,並返回</script>這裡指的注意的是,eval執行的指令碼,產生的變數,是屬於調用eval的那個範圍的
<script language=javascript type=text/javascript> eval(var str = '全域';);function test(){eval(var str = '局部';);alert(str);//局部}test();alert(str);//全域</script>下面講一下json串和javaScript對象的相互轉換吧 json串轉換成js對象:
<script language=javascript type=text/javascript> var jsonpeople = [{'name':'hj','age':21},{'name':'darkrake','age':21}];var jspeople = eval('('+jsonpeople+')');alert(jspeople[0].name+:+jspeople[0].age);alert(jspeople[1].name+:+jspeople[1].age);</script>
json與XML的格式對比
簡單對比:
XML:
hj 21 darkrake 21
對應的json串格式:
{peoples:{people:[{'name':'hj','age':21},{'name':'darkrake','age':21}]}}來一個稍微複雜一點的吧,多層嵌套的:
安徽 六安 金安區 舒城 合肥 肥東 肥西 北京 北京 東城區 海澱區
{ address: { Province: [ { ProvinceName: 安徽, City: [ { CityName: 六安, town: [ 金安區, 舒城 ] }, { CityName: 合肥, town: [ 肥東, 肥西 ] } ] }, { ProvinceName: 北京, City: { CityName: 北京, town: [ 東城區, 海澱區 ] } } ] }}
json in Java API常用的類以及方法
JSONObject類(往往與JSONArray結合起來用,最常用了)
案例:
package javaJsonAPI;import org.json.JSONObject;public class JsonArrayTest {/* * 表示我沒有在官網http://www.json.org/裡面找到json的jar包 ,這裡我的解決 方案是下載官網提供的源檔案*.java * 項目裡面建了一個名為org.json的package,把源檔案都匯入進去了,其實和在classpath中匯入jar包沒有區別 */public static void main(String args[]) {JSONObject jsonObject = new JSONObject({'name':'DarkRake','age':21});System.out.println(jsonObject.get(name));System.out.println(jsonObject.get(age));}}
JSONArray類 案例:
package javaJsonAPI;import org.json.JSONArray;public class JsonArrayTest {/* * 表示我沒有在官網http://www.json.org/裡面找到json的jar包 ,這裡我的解決 方案是下載官網提供的源檔案*.java * 項目裡面建了一個名為org.json的package,把源檔案都匯入進去了,其實和在classpath中匯入jar包沒有區別 */public static void main(String args[]) {String strs[] = { one, two, three };JSONArray myjson = new JSONArray(strs);for (int i = 0; i < myjson.length(); i++) {System.out.println(myjson.getString(i));}}}進階:JSONObject與JSONArray類結合使用
package javaJsonAPI;import org.json.JSONObject;public class JsonArrayTest {/* * 表示我沒有在官網http://www.json.org/裡面找到json的jar包 ,這裡我的解決 方案是下載官網提供的源檔案*.java * 項目裡面建了一個名為org.json的package,把源檔案都匯入進去了,其實和在classpath中匯入jar包沒有區別 */public static void main(String args[]) {String str = {address: {Province: {ProvinceName: 安徽,City: [{CityName: 六安,own: [金安區,舒城] },{CityName: 合肥,own: [肥東,肥西]}]}}};JSONObject jo = new JSONObject(str);String ProvinceName = jo.getJSONObject(address)//.getJSONObject(Province).get(ProvinceName).toString();//System.out.println(ProvinceName);String cityName = jo.getJSONObject(address).getJSONObject(Province)//.getJSONArray(City).getJSONObject(0).get(CityName)//.toString();System.out.println( + cityName);String town1 = jo.getJSONObject(address).getJSONObject(Province)//.getJSONArray(City).getJSONObject(0).getJSONArray(town)//.get(0).toString();System.out.println( + town1);String town2 = jo.getJSONObject(address).getJSONObject(Province)//.getJSONArray(City).getJSONObject(0).getJSONArray(town)//.get(1).toString();System.out.println( + town2);}}JSONStringer
->快速構建一個JSON串,並可以寫入檔案中去
基本方法介紹:
JSONStringer是JSONWriter的子類;
JSONStringer一般通過object().key().value().key().value().endObject()進行構造;
JSONString ():建構函式
object()表明開始一個對象,即添加{ ;
endObject()表明結束一個對象,即添加 } ;
array()表明開始一個數組,即添加一個 [ ;
endArray()表明結束一個數組,即添加一個 ] ;
key()表示添加一個key;
value()表示添加一個value;
注意:通過該方法,Object之間的“,”以及Array數組各個value之間的“,”都是自動添加的
簡單案例:
package javaJsonAPI;import org.json.JSONStringer;public class JsonArrayTest {/* * 表示我沒有在官網http://www.json.org/裡面找到json的jar包 ,這裡我的解決 方案是下載官網提供的源檔案*.java * 項目裡面建了一個名為org.json的package,把源檔案都匯入進去了,其實和在classpath中匯入jar包沒有區別 */public static void main(String args[]) {JSONStringer js = new JSONStringer();js.array();js.object();js.key(name);js.value(hj);js.key(age);js.value(21);js.endObject();js.object();js.key(name);js.value(darkrake);js.key(age);js.value(21);js.endObject();js.endArray();System.out.println(js.toString());}}
小綜合案例:
package javaJsonAPI;import org.json.JSONArray;import org.json.JSONObject;import org.json.JSONStringer;public class JsonArrayTest {/* * 表示我沒有在官網http://www.json.org/裡面找到json的jar包 ,這裡我的解決 方案是下載官網提供的源檔案*.java * 項目裡面建了一個名為org.json的package,把源檔案都匯入進去了,其實和在classpath中匯入jar包沒有區別 */public static void main(String args[]) {JSONStringer js = new JSONStringer();// 建立book1JSONObject book1 = new JSONObject();book1.put(name, Java);JSONArray ja1 = new JSONArray();String str1[] = { LiuWANJUN, XXX };ja1.put(str1);book1.put(author, ja1);book1.put(price, ¥108);// 建立book2JSONObject book2 = new JSONObject();book2.put(name, JavaScript);JSONArray ja2 = new JSONArray();String str2[] = { LiSongFeng, CaoLi };ja2.put(str2);book2.put(author, ja2);book2.put(price, ¥108);js.object();js.key(Book);js.array();js.value(book1);js.value(book2);js.endArray();js.endObject();System.out.println(js.toString());}}
{ Book: [ { author: [ [ LiuWANJUN, XXX ] ], price: ¥108, name: Java }, { author: [ [ LiSongFeng, CaoLi ] ], price: ¥108, name: JavaScript } ]}轉換成XML即為:
LiuWANJUNXXX¥108JavaLiSongFengCaoLi¥108JavaScript
總結:
1.JSON是一種資料交換的格式,在web項目中具有著廣泛的應用,尤其是AJAX一步載入資料,往往都是用json格式的資料,而不是傳統的XML;
2.JSON只有兩種結構,Object和Array
3.不知道我寫的有沒有錯,我也是參考了別人的學習方案進行學習和理解的,下周有時間,抽空學習前段JSON的應用吧,這裡寫的主要是Java背景操作