Json for Java API學習

來源:互聯網
上載者:User

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背景操作
 
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.