Servlet傳多個(gè)JSON變量(Java)
通過(guò)Java servlet處理前臺(tái)頁(yè)面JS發(fā)出的請(qǐng)求,為了和JS兼容通常把Java變量轉(zhuǎn)化成JSON再傳遞給前臺(tái)的JS進(jìn)行處理。例如在servlet中:
ArrayList tempList = new ArrayList();
tempList.add("a");
tempList.add("b");
JSONArray jsonArray = JSONArray.fromObject(tempList);
PrintWriter pw = response.getWriter();
pw.write( jsonArray.toString() );
這樣就可以把tempList轉(zhuǎn)換成json格式發(fā)給前臺(tái)JS處理。
如果要同時(shí)傳遞多個(gè)變量,可以自定義類(lèi)存放N個(gè)屬性,放到ArrayList中轉(zhuǎn)換成jsonArray再傳過(guò)去,也可自己定義數(shù)據(jù)結(jié)構(gòu)。但是對(duì)于邏輯、數(shù)據(jù)結(jié)構(gòu)均不同的變量,確實(shí)要分開(kāi)傳遞。例如想要再傳遞一個(gè)哈希Map:
Map clusterMap = new HashMap();
clusterMap.put("cluster", "a");
JSONObject jsonObject = JSONObject.fromObject(clusterMap);
注意JSON要求鍵值must be strings,因此所傳的Map的鍵值要為String類(lèi)型
再write一下pw.write( jsonArray.toString() );
實(shí)際上如果這樣做的話(huà)JS并不能獲取到傳遞的變量,即使再加一層Map設(shè)定這些變量的鍵值,JS再通過(guò)鍵獲得這些變量也會(huì)出問(wèn)題(不知道簡(jiǎn)單的變量有沒(méi)問(wèn)題,沒(méi)試過(guò),但我用的時(shí)候就只能獲得第一個(gè)數(shù)據(jù))。
考慮到j(luò)son格式的本質(zhì)是數(shù)組,將轉(zhuǎn)換后的變量再用數(shù)組格式進(jìn)行連接,再傳過(guò)去,就OK了。例如:
String r = "["+jsonArray.toString()+","+jsonObject2.toString()+"]";
PrintWriter pw2 = response.getWriter();
pw2.write(r);
這樣,JS通過(guò)獲取第0個(gè)數(shù)組就可以獲得tempList,第1個(gè)數(shù)組獲得clusterMap
posted on 2012-10-18 10:51 飛豬一號(hào) 閱讀(2454) 評(píng)論(0) 編輯 收藏