W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
在解析之前,我們必須弄清楚幾個(gè)概念:數(shù)組,關(guān)聯(lián)數(shù)組以及json之間有哪些區(qū)別和聯(lián)系點(diǎn)?
語法:
ECMAScript v3規(guī)定了數(shù)組直接量的語法,JavaScript 1.2和JScript 3.0實(shí)現(xiàn)了它??梢园选獋€(gè)用逗號(hào)分隔的表達(dá)式列表放在方括號(hào)中,創(chuàng)建并初始化—個(gè)數(shù)組。這些表達(dá)式的值將成為數(shù)組元素。例如:
var a = [1, true, 'abc'];
具體操作查看API.
ps:必須方括號(hào)隔開。
2、關(guān)聯(lián)數(shù)組
(1)語法:
var myhash= {”key1″:”val1″, “key2″:”val2″ };//obj
(2)var
myhash= {key1:”val1″, key2:”val2″ };//obj-也可以
ps:跟json格式幾乎相同,但是json格式要求更加嚴(yán)格(里面的鍵值對(duì)必須使用雙引號(hào)),但json只能作為一種格式標(biāo)準(zhǔn),如果要對(duì)其進(jìn)行操作必須轉(zhuǎn)換成關(guān)聯(lián)數(shù)組對(duì)象(obj)。
2、簡(jiǎn)單操作
(1)向Hash關(guān)聯(lián)數(shù)組添加鍵值
// 添加一個(gè)新鍵 newkey ,鍵值為 newval
myhash[”newkey”] = “newval”;
(2)刪除Hash關(guān)聯(lián)數(shù)組已有鍵值
// 刪除一個(gè)鍵 newkey ,同時(shí),該鍵值對(duì)應(yīng)的 newval 也就消失了
delete myhash[”newkey”];
(3)遍歷Hash關(guān)聯(lián)數(shù)組
// 遍歷整個(gè)hash 數(shù)組
for (key in myhash) {
val = myhash[key];
}
(4)獲得值
方式1.myhash.key1
方式2.myhash.key2
3、json
格式要求:
{”key1″:”val1″, “key2″:”val2″ };//嚴(yán)格按照此格式,操作可依照關(guān)聯(lián)數(shù)組的操作
2.至始至終服務(wù)器給客戶端的數(shù)據(jù)都只是字符串,因此為了讓其能夠在js中對(duì)其進(jìn)行必要的操作,可以通過eval()進(jìn)行轉(zhuǎn)換成js可執(zhí)行的對(duì)象。
因此jQuey中提供的$.parseJSON()是有局限的,如果是上面1提到的這種情況則就必須使用eval()進(jìn)行轉(zhuǎn)換,然后再通過$.each(objs,function(i,o){...})進(jìn)行操作
頁面代碼:
代碼如下:
<body>
<input type="button" value="send ajax json" onclick="sendAjaxByjson();"/>
<input type="button" value="send ajax array" onclick="sendAjaxByarray();"/>
</body>
<script type="text/javascript">
function sendAjaxByjson(){
$.post("json",{},function(data){
var obj=data;
alert(typeof obj);//string
//var a=eval(obj);不解,不注釋則會(huì)報(bào)錯(cuò)..
var strToobj=$.parseJSON(obj);
alert(strToobj.name);
alert(typeof strToobj)//obj
var obja={'name':'techbirds','age':'23','sex':'male'};
alert(typeof obja);//obj
alert(obja['name']+":"+obja.age);
delete obja['name'];
});
}
function sendAjaxByarray(){
$.post("array",{},function(data){
var str=data;
alert(typeof str);//string
alert(typeof eval(str));//object
var obja=[1,2,3,4,5];
alert(typeof obja);//object
});
}
</script>
后臺(tái)代碼:
代碼如下:
@Override
protected void service(HttpServletRequest req, HttpServletResponse reps)
throws ServletException, IOException {
Map<String, Object> jsonMap=new HashMap<String, Object>();
jsonMap.put("name", "techbirds");
jsonMap.put("age", 23);
jsonMap.put("sex", "male");
reps.getWriter().print(JSONObject.fromObject(jsonMap).toString());
reps.getWriter().flush();
reps.getWriter().close();
}
代碼如下:
@Override
protected void service(HttpServletRequest req, HttpServletResponse reps)
throws ServletException, IOException {
String array="[1,2,3,4,5,6]";
reps.getWriter().print(array);
reps.getWriter().flush();
reps.getWriter().close();
}
一個(gè)json對(duì)象數(shù)組的json字符串:
var str=[{"Price":12,"Name":"aaa","Age",22},{"Price":24,"Name":"bbb","Age",33}];
在前臺(tái),使用jquery的parseJSON方法來進(jìn)行解析,并用jquery的foreach的方法來進(jìn)行解析,代碼如下:
var jsonarray= $.parseJSON(str);
alert(jsonarray);
$.each(jsonarray, function (i, n)
{
alert(n.Price);
}
對(duì)于不同版本的jquery來說,它們解析的json對(duì)象數(shù)組的字符串格式也不同(我使用了兩個(gè)不同版本的jquery,就遇到了這樣的問題),如果上述代碼無法解析,就用eval函數(shù)來包裹一下,代碼如下:var jsonarray= $.parseJSON(str);
$.each(eval("(" + jsonarray+ ")"), function (i, n) {
alert(n.Price);
}
在解析json對(duì)象數(shù)組字符串的過程中,也可以使用alert來彈出$.parseJSON(str)解析后的結(jié)果,如果彈出的對(duì)話框中顯示object,則說明解析成功了,可以通過對(duì)象.屬性名獲得到對(duì)應(yīng)屬性的值,如果彈出的不是object,則用eval()來進(jìn)行包裝一下形成對(duì)象,再獲得對(duì)應(yīng)屬性的值。Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: