json簡單說就是javascript中的對象和數組。
1、對象:對象在js中表示爲“{}”擴起來的內容,數據結構爲 {key:value,key:value,...}的鍵值對的結構,在面向對象的語言中,key爲對象的屬性,value爲對應的屬性值,所以很容易理解,取值方法爲 對象.key 獲取屬性值,這個屬性值的類型可以是 數字、字符串、數組、對象幾種。
2、數組:數組在js中是中括號“[]”擴起來的內容,數據結構爲 ["java","javascript","vb",...]或[{key:"value"},{key:"value"}],取值方式和所有語 言中一樣,使用索引獲取,字段值的類型可以是 數字、字符串、數組、對象幾種。
現在細說兩個結構的使用。
對象結構:
{
no1:{
stuNo: 'no1' ,
stuName: '張三'
}
}
以上是一個完整的json對象建構。no1表示一個學生對象,它可以實現存在文本中或者由Serlvet輸出而成,代碼模式爲:StringBuffer sb = new StringBuffer();
sb.append( "{" );
sb.append( "student:{" );
sb.append( " stuNo:'10000'," );
sb.append( " stuName:'張三'," );
sb.append( " }" );
sb.append( "}" );
out.print(sb.toString());
通過jQuery很容易就可以通過Serlvet獲取到這條數據。$.getJSON(url, function (data) { //url是輸出json數據的頁面地址,data便是從servlet輸出的json數據,
for ( var stuNo in data) {//對象是鍵值對的結構,和Map類似,通過鍵能獲取相應的值。
var stu = data[stuNo];//這裏獲取的便是no1的對象
var stuNo = stu.stuNo; //對象的屬性可以直接用對象.屬性的方式得到屬性值
var stuName=stu.stuName;
//至此,我們便能獲取一條完整的student信息了。
} }, "json" );
一個簡單的JSON對象結構爲:{stuNo:'100',stuName:'張三'}。同樣是通過data.stuNo,data.stuName的方式獲取裏面的值。{
"學生" :
[
{ "姓名" : "小明" , "年齡" : 23 },
{ "姓名" : "大憨" , "年齡" : 24 }
]
}
此Json對象包括了一個學生數組,而學生數組中的值又是兩個Json對象。
對象結構裏可以包含數組結構,同樣數組結構裏也能包含數組。這就好比對象裏可以有數組類型的屬性,而數組也有對象數組之分。
對象結構的遍歷得通過鍵來循環,而數組結構通過索引遍歷。
JSON數據內,不同的主條目之間,記錄的實際名稱/值可以不一樣
{
no1 : {
stuNo : 'no1' ,
stuName : '張三'
},
no2 : {
stuNo : 'no2' ,
stuName : '李四',
sex:'男'
}
}這裏no2對象中多了個sex的名稱,這在JSON中也是允許的。JSON數據是完全動態的,允許在JSON結構的中間改變數據的方式。處理JSON格式的數據時,沒有需要遵守的預定義的約束。 訪問數據:在Javascript中,JSON數據可以直接賦值給變量:var student={ "學生" : [{ "姓名" : "小明" , "年齡" : 23 }]}
這裏student實質已經成爲了一個數組,再訪問裏面的數據只需通過點號表示法來獲取。得到小明的Javascript代碼:var xiaoming=studetn.學生[0].姓名
通過“學生”得到一個數組,然後直接從索引0得到第一條記錄,最後訪問“姓名”鍵的值,結果是“小明”。 修改數據:studetn.學生[ 0 ].姓名="小紅"在將字符串轉換爲 JavaScript 對象之後,就可以像這樣修改變量中的數據。
修改數據的前提是對象得是文本格式,如果是直接從其他地方傳進來的JSON數據,JavaScript會以對象來處理,無法通過數組的形式修改值。兩種方式可以把JSON對象轉換爲JSON文本,一是eval(JSON),二是:JSON.toJSONString();這樣就可以獲得一個能在任何地方使用的JSON文本字符串。toJSONString()方法還能直接將其他對象轉換爲JSON文本,獲得格式化的數據。 JSON數據有嚴格的格式,逗號,大括號,中括號必須補齊,不能多不能少。推薦個網站檢查自己的JSON數據格式: