json的語法可以表示以下三種類型的值。
1、簡單值:可以在json中表示字符串、數值、布爾和null。
2、對象:對象作為一種復雜的數據類型,表示一組有序的鍵值對兒。
3、數組:數組也是一種復雜的數據類型,表示一組有序的值列表,可以通過數值索引來訪問其中的值。
json不支持變量、函數或對象實例,它就是一種表示結構化數據的格式。
1.1:簡單值:
如下10,“aa”,json字符串與js字符串最大的區別是json字符串必須使用雙引號布爾與null也是有效的json形式。
2.1:對象
對象字面量一般寫法是:
var aa ={ name:"zoumm", job :"it", age :25 };
json對象一般這樣寫的:
{ "name":"zoumm", "job":"it", "age":23,
"school":{
"name":"大學名",
“add”:"中國"
}
}
他們的區別是,json對象不用定義變量,末尾不用寫分號,切所有的屬性名必須加雙引號;
3.1:數組
一般數組是這樣定義的:
var aa = [23,"zoumm"];
json數組是這樣定義的
[ 23,"zoumm" ]
他們的區別是,json數組不用定義變量,末尾不用寫分號;
在Jquery中實現ajax用post請求后台json數據時,返回了一個html,而不是想要的Json數據,這個問題郁悶了一上午,在網上查的方法一沒用。最后終於發現是因為在service方法中引用了“super.service();” 這句話。去掉就解決了。
下面進入正題:js中如何操作json數據。
一、要想熟練的操作json數據,就先要了解json數據的結構,json有兩種結構:對象和數組。
1、對象 一個對象以“{”開始,“}”結束。每個“名稱”后跟一個“:”;“‘名稱/值’ 對”之間使用“,”分隔。 名稱用引號括起來;值如果是字符串則必須用括號,數值型則不需要。例如: var jsonObj={"str":"abc","intstr":1322323456,"max":6753,"time":"2012-10-19"};
2. 數組是值(value)的有序集合。一個數組以“[” 開始,“]”結束。值之間運用 “,”分隔。
例如:var jsonList=[{"str":"abc","intstr":1322323456,"max":6753,"time":"2012-10-19"}, {"str":"cde","intstr":782144556,"max":15400,"time":"2012-10-19"}];
二、JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式,采用完全獨立於語言的文本格式,是理想的數據交換格式。json在傳輸過程中是以文本形式存在的,即字符串的形式。而在JS中需要操作的是對象,所以需要把json轉換成對象,一般用“eval()”函數來實現,例如 :var obj = eval('(' + json+ ')'); 這樣就可以隨意操作json了。
三、如果不知道jsonlist對象里的key和value怎樣來獲得其中的數據?
for(var i=0;i<jsonList.length;i++){
for(var key in jsonList[i]){
alert("key:"+key+",value:"+jsonList[i][key]);
}
}
用這種方法就可以解析json數據了。
json解析與序列化
1:json對象
json對象有兩個方法stringify和parse,他們分別是把js對象序列化成json字符串,和把json字符串解析成原生js值,例如:
var aa ={ name:"zoumm", age:23 }; var bb = JSON.stringify(aa); console.log(bb); //打印出{"name":"zoumm","age":23}
在序列化js對象時,所有函數與原型成員都會有意忽略,不體現在結果中,此外,值為undeined的任何屬性也會被跳過。例如:
var aa1 ={ name:"zj", age:25,
tmp:undefined,
say:function(){ console.log(1); } };
var bb1 = JSON.stringify(aa1); console.log(bb1); //打印{"name":"zj","age":25}
}
將json字符串傳遞給json.parse,就得到js的值,如下:
var cc = JSON.parse(bb1); console.log(cc );//打印Object {name: "zj", age: 25}
雖然cc與aa1有相同的屬性,但是他們是獨立的,沒有任何關系的對象
2:序列化選項
JSON.stringify()還接受兩個參數,這兩個參數用於指定不同方式序列化js對象,第一個參數可以是對象也可以使函數,第二個是一個選項,表示是否在json字符串中保留 縮進,
var book = { name :"zoumm", age :23, job :"it" } var text = JSON.stringify(book,["name","job"]);//兩個參數,參數一:函數或者數組,參數二,截取的數據 console.log(text)//打印 {"name":"zoumm","job":"it"}
3:解析選項