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的方式獲取里面的值。
對象的具體形式:
1、對象是一個“名稱/值”集合,如 no1:{stuNo:'no1',stuName:'張三'} 這個對象的鍵是no1,通過no1能獲取所有信息,再通過no1.stuNo的鍵能獲取stuNo的值。
2、對象以{ 開始,以 }結束。每個名稱后面跟一個冒號:,如no1、stuNo后面都是以冒號結尾。
3、每個“鍵/值”間都用逗號,分開。如:stuNo:'no1',stuName:'張三' 。
數組結構:
[
{"stuNo":"100","stuName":"張三"}
]
這個簡單的數組結構可就無法通過鍵來取值,得使用數組的索引方式取值。如:
var student1=data[0];
這樣便獲取了第一條學生信息,想要進一步取得stuNo和stuName的值,就可以直接用鍵來取了。之所以數組結構里的具體取值跟對象結構取值一樣,看看每條信息的格式就明白了,以{ 開始,以 }結束,這不就是一個對象么。所以說來,數組結構里可以包含對象結構。
JSON數組的具體形式:
1、數組以“[”開始,以“]”結束,值之間用逗號,分開。
對象&數組
{
"學生"
:
[
{
"姓名"
:
"小明" ,
"年齡"
:
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數據格式: