天天看点

转载:JSON在java web中的应用

聽聽

<script language=JavaScript type=text/javascript> var Url_One="http%3A//etoow.com/html/2007-05/1179108630.html"; var Url_Two="http%3A//www.etoow.com/html/2007-05/1179108630.html"; var Url=escape(location.href); if(Url!=Url_One){ if(Url!=Url_Two){ window.location="http://www.etoow.com/html/2007-05/1179108630.html"; } } </script>鏁寸悊鏃ユ湡锛?007骞?6鏈?鏃? 杞嚜锛氫紛鍥炬暀绋嬬綉 [www.etoow.com] 鎽樿

銆€銆€ XML鈥斺€?杩欑鐢ㄤ簬琛ㄧず瀹㈡埛绔笌鏈嶅姟鍣ㄩ棿鏁版嵁浜ゆ崲鏈夋晥璐熻浇鐨勬牸寮忥紝鍑犱箮宸茬粡鎴愪簡 Web services 鐨勫悓涔夎瘝銆傜劧鑰岋紝鐢变簬 Ajax 鍜?REST 鎶€鏈殑鍑虹幇褰卞搷浜嗗簲鐢ㄧ▼搴忔灦鏋勶紝杩欒揩浣夸汉浠紑濮嬪姹?`XML 鐨勬浛浠e搧锛屽锛?JavaScript Object Notation 锛?JSON 锛夈€?

銆€銆€ JSON 浣滀负涓€绉嶆洿杞汇€佹洿鍙嬪ソ鐨? Web services 瀹㈡埛绔殑鏍煎紡锛堝閲囩敤娴忚鍣ㄧ殑褰㈠紡鎴栬闂? REST 椋庢牸 Web 鏈嶅姟鐨?Ajax 搴旂敤绋嬪簭鐨勫舰寮忥級寮曡捣浜? Web 鏈嶅姟渚涘簲鍟嗙殑娉ㄦ剰銆?

銆€銆€鏈枃灏嗛槓杩?JSON 鍦?Web services 璁捐涓鍙楁帹宕囩殑鍘熷洜锛屼互鍙婂畠浣滀负 XML 鏇夸唬鏂规鐨勪富瑕佷紭鍔垮拰灞€闄愭€с€傛枃涓繕浼氭繁鍏ユ帰璁細闅忕潃鐩稿簲鐨?Web 鏈嶅姟瀹㈡埛绔€夋嫨浣跨敤 JSON 锛屽浣曟墠鑳戒究鎹峰湴鍦?Java Web services 涓敓鎴?JSON 杈撳嚭銆?

XML 鐨勫崄瀛楄矾鍙?: 娴忚鍣ㄥ拰 Ajax

銆€銆€ XML 璁捐鍘熺悊宸茬粡鍙戝竷浜嗗皢杩戝崄骞淬€傛椂鑷充粖鏃ワ紝杩欑鏍囪璇█宸茬粡鍦ㄥ箍闃旂殑杞欢搴旂敤棰嗗煙涓崰鎹簡涓诲鍦颁綅銆備粠 Java 銆?.NET 绛変富娴佸钩鍙颁腑鐨勯厤缃拰閮ㄧ讲鎻忚堪绗﹀埌搴旂敤闆嗘垚鍦烘櫙涓洿澶嶆潅鐨勫簲鐢紝 XML 涓庣敓淇辨潵鐨勮瑷€鏃犲叧鎬т娇涔嬪湪杞欢鏋舵瀯甯堝績鐩腑鍗犳嵁鐫€鐙壒鐨勫湴浣嶃€備絾鍗充究鏈€钁楀悕鐨?XML 鏉冨▉涔熶笉寰椾笉鎵胯锛氬湪鏌愪簺鐜涓紝 XML 鐨勪娇鐢ㄥ凡缁忚秴鍑轰簡瀹冭嚜韬兘鍔涚殑鏋侀檺銆?

銆€銆€鍥寸粫 Ajax 鍘熺悊鏋勫缓鐨勯偅浜?Web 搴旂敤绋嬪簭鏈€鑳借鏄?XML 鐨勭敓瀛樿兘鍔涳紝浠庤繖涓€鐐规潵鐪嬶紝涓€绉嶆柊鐨勬湁鏁堣礋杞芥牸寮忕殑鍙戝睍澹ぇ涔熷緱鐩婁簬 XML 銆傝繖绉嶆柊鐨勬湁鏁堣礋杞芥牸寮忓氨鏄?JavaScript Object Notation (JSON) 銆傚湪鎺㈢储杩欑鏂扮殑鏍囪璇█鐨勫鏉傛€т箣鍓嶏紝棣栧厛鏉ュ垎鏋愪竴涓嬪湪杩欑鐙壒鐨勮璁″舰寮忎腑锛?XML 鍏锋湁鍝簺灞€闄愭€с€?

銆€銆€ Ajax 寤虹珛浜嗕竴涓敤浜庝粠杩滅▼ Web services 鍙戦€佸拰鎺ユ敹鏁版嵁鐨勭嫭绔嬩俊閬擄紝浠庤€屽厑璁?Web 绋嬪簭鎵ц淇¢亾澶栵紙 out-of-band 锛夊鎴风 / 鏈嶅姟鍣ㄨ皟鐢ㄣ€傞€氫織鍦拌锛?Ajax 绋嬪簭涓殑鏇存柊鍜屽鑸簭鍒楀湪鍏稿瀷鐨勫鎴风 / 鏈嶅姟鍣ㄧ幆澧冧箣澶栧畬鎴愶紝鍦ㄥ悗鍙帮紙鍗充俊閬撳锛夋帴鍙楀埌淇℃伅鍚庯紝蹇呴』杩涜涓€娆″畬鏁寸殑灞忓箷鍒锋柊銆傛洿澶氳儗鏅俊鎭紝璇峰弬闃?David Teare 鐨? Ajax 绠€浠嬶紙 Dev2Dev 锛夈€?

銆€銆€杩欎簺搴旂敤绋嬪簭鏇存柊閫氬父鏄€氳繃 REST 椋庢牸锛?RESTful 锛?Web services 鑾峰緱鐨勶紝涓€鏃﹁鐢ㄦ埛鐨勬祻瑙堝櫒鎺ユ敹鍒帮紝灏遍渶瑕佹暣鍚堝埌 HTML 椤甸潰鐨勬€讳綋甯冨眬涔嬩腑锛岃繖姝f槸 XML 鍙戞尌寮哄ぇ鍔涢噺鐨勫満鍚堛€傚敖绠¤繎骞存潵锛岃剼鏈瑷€鏀寔鍜屾彃浠舵敮鎸佸凡浣垮ぇ澶氭暟涓绘祦娴忚鍣ㄧ殑鍔熻兘寰楀埌浜嗗己鍖栵紝浣嗚澶氱紪绋嬩换鍔′緷鐒堕毦浜庡紑灞曪紝鍏朵腑涔嬩竴灏辨槸鎿嶇旱鎴栧鐞嗘枃鏈紝杩欓€氬父鏄娇鐢?DOM 瀹炵幇鐨勩€?

銆€銆€閲囩敤 DOM 鐨勫鏉傛€ф簮浜庡叾鍩轰簬鍑芥暟鐨勬牴锛岃繖浣垮緱瀵规暟鎹爲鐨勭畝鍗曚慨鏀规垨璁块棶閮介渶瑕佽繘琛屾棤鏁版鏂规硶璋冪敤銆傛澶栵紝浼楁墍鍛ㄧ煡锛?DOM 鍦ㄥ悇绉嶆祻瑙堝櫒涓殑瀹炵幇缁嗚妭涓嶅敖鐩稿悓锛岃繖涓€杩囩▼灏嗗甫鏉ユ瀬涓哄鏉傜殑缂栫▼妯″紡锛屽叾璺ㄦ祻瑙堝櫒鍏煎鎬у嚭鐜伴棶棰樼殑鍙兘鎬ф瀬澶с€傛帴涓嬫潵鐨勯棶棰樻樉鑰屾槗瑙侊紝閭e氨鏄細濡備綍浣夸竴绉嶆爣璁拌瑷€杞绘澗闆嗘垚鍒?HTML 椤甸潰涓互婊¤冻 Ajax 鐨勮姹傦紵

銆€銆€闂鐨勭瓟妗堝氨鏄細鍒╃敤鎵€鏈変富娴佹祻瑙堝櫒涓殑涓€绉嶉€氱敤缁勪欢 鈥斺€擩avaScript 寮曟搸銆?XML 闇€瑕佷娇鐢?DOM 涔嬬被鐨勬満鍒舵潵璁块棶鏁版嵁骞跺皢鏁版嵁鏁村悎鍒板竷灞€涔嬩腑锛岄噰鐢ㄨ繖绉嶆柟娉曪紝鎴戜滑涓嶅啀浣跨敤鍍?XML 杩欐牱鐨勬牸寮忔潵浜や粯 Ajax 鏇存柊锛岃€屾槸閲囩敤涓€绉嶆洿涓虹畝鍗曠洿瑙傜殑鏂瑰紡锛岄噰鐢?JavaScript 寮曟搸鑷劧鍖归厤鐨勬牸寮?鈥斺€?涔熷氨鏄?JSON 銆?

銆€銆€鏃㈢劧宸茬粡鏄庣‘浜?JSON 涓?XML 鍜?Ajax 涔嬮棿鐨勫叧绯伙紝涓嬮潰灏嗚繘涓€姝ユ帰璁?JSON 鑳屽悗鐨勬妧鏈粏鑺傘€?

JSON 鍓栨瀽锛氫紭鐐瑰拰涓嶈冻

銆€銆€瀵逛簬 JSON 锛岄鍏堣鏄庣櫧 JSON 鍜?XML 涓€鏍蜂篃鏄竴绉嶇畝鍗曟枃鏈牸寮忋€傜浉瀵逛簬 XML 锛屽畠鏇村姞鏄撹銆佹洿渚夸簬鑲夌溂妫€鏌ャ€傚湪璇硶鐨勫眰闈笂锛?JSON 涓庡叾浠栨牸寮忕殑鍖哄埆鏄湪浜庡垎闅旀暟鎹殑瀛楃锛?JSON 涓殑鍒嗛殧绗﹂檺浜庡崟寮曞彿銆佸皬鎷彿銆佷腑鎷彿銆佸ぇ鎷彿銆佸啋鍙峰拰閫楀彿銆備笅鍥炬槸涓€涓?JSON 鏈夋晥璐熻浇锛?

{"addressbook": {"name": "Mary Lebow",

"address": {

"street": "5 Main Street"

"city": "San Diego, CA",

"zip": 91912,

},

"phoneNumbers": [

"619 332-3452",

"664 223-4667"

]

}

}

銆€銆€灏嗕笂闈㈢殑 JSON 鏈夋晥璐熻浇鐢?XML 鏀瑰啓锛屽涓嬶細

<addressbook>

<name>Mary Lebow</name>

<address>

<street>5 Main Street</street>

<city zip="91912"> San Diego, CA </city>

<phoneNumbers>

<phone>619 332-3452</phone>

<phone>664 223-4667</phone>

</phoneNumbers>

</address>

</addressbook>

銆€銆€鏄笉鏄緢鐩镐技锛熶絾瀹冧滑骞朵笉鐩稿悓銆備笅闈㈠皢璇︾粏闃愯堪閲囩敤 JSON 鍙ユ硶鐨勪紭鐐瑰拰涓嶈冻銆?

浼樼偣

銆€銆€涔嶇湅涓婂幓锛屼娇鐢?JSON 鐨勬暟鎹垎闅旂鐨勪紭鐐瑰彲鑳藉苟涓嶉偅涔堟槑鏄撅紝浣嗗瓨鍦ㄤ竴涓牴鏈€х殑缂樼敱锛氬畠浠畝鍖栦簡鏁版嵁璁块棶銆備娇鐢ㄨ繖浜涙暟鎹垎闅旂鏃讹紝 JavaScript 寮曟搸瀵规暟鎹粨鏋勶紙濡傚瓧绗︿覆銆佹暟缁勩€佸璞★級鐨勫唴閮ㄨ〃绀烘伆濂戒笌杩欎簺绗﹀彿鐩稿悓銆?

銆€銆€杩欏皢寮€鍒涗竴鏉℃瘮 DOM 鎶€鏈洿涓轰究鎹风殑鏁版嵁璁块棶閫斿緞銆備笅闈㈠垪涓惧嚑涓?JavaScript 浠g爜鐗囨鏉ヨ鏄庤繖涓€杩囩▼锛岃繖浜涗唬鐮佺墖娈典細璁块棶鍏堝墠鐨?JSON 浠g爜鐗囨涓殑淇℃伅锛?

* 璁块棶 JSON 涓殑鍚嶇О锛? addressbook.name

* 璁块棶 JSON 涓殑鍦板潃锛? addressbook.address.street

* 璁块棶 JSON 涓殑鐢佃瘽鍙风爜绗竴浣嶏細 addressbook.address.phoneNumbers[0]

銆€銆€濡傛灉鎮ㄥ叿澶?DOM 缂栫▼缁忛獙锛屽氨鑳藉緢蹇湴鐪嬪嚭鍖哄埆锛涙柊鎵嬪彲浠ュ弬鐪? Document Object Model 鐨勮繖涓€澶栭儴璧勬簮锛岃繖閲屾彁渚涗簡鍏充簬鏁版嵁瀵艰埅鐨勫疄渚嬨€?

銆€銆€ JSON 鐨勫彟涓€涓紭鐐规槸瀹冪殑闈炲啑闀挎€с€傚湪 XML 涓紝鎵撳紑鍜屽叧闂爣璁版槸蹇呴渶鐨勶紝杩欐牱鎵嶈兘婊¤冻鏍囪鐨勪緷浠庢€э紱鑰屽湪 JSON 涓紝鎵€鏈夎繖浜涜姹傚彧闇€閫氳繃涓€涓畝鍗曠殑鎷彿鍗冲彲婊¤冻銆傚湪鍖呭惈鏈夋暟浠ョ櫨璁″瓧娈电殑鏁版嵁浜ゆ崲涓紝浼犵粺鐨?XML 鏍囪灏嗕細寤堕暱鏁版嵁浜ゆ崲鏃堕棿銆傜洰鍓嶈繕娌℃湁姝e紡鐨勭爺绌惰〃鏄?JSON 姣?XML 鏈夋洿楂樼殑绾夸笂浼犺緭鏁堢巼锛涗汉浠彧鏄€氳繃绠€鍗曠殑瀛楄妭鏁版瘮杈冨彂鐜帮紝瀵逛簬绛夋晥鐨?JSON 鍜?XML 鏈夋晥璐熻浇锛屽墠鑰呮€绘槸灏忎簬鍚庤€呫€傝嚦浜庡畠浠箣闂寸殑宸窛鏈夊澶э紝鐗瑰埆鏄湪鏂扮殑 XML 鍘嬬缉鏍煎紡涓嬪畠浠殑宸窛鏈夊澶э紝鏈夊緟杩涗竴姝ョ殑鐮旂┒銆?

銆€銆€姝ゅ锛?JSON 鍙楀埌浜嗘搮闀夸笉鍚岀紪绋嬭瑷€鐨勫紑鍙戜汉鍛樼殑闈掔潗銆傝繖鏄洜涓烘棤璁哄湪 Haskell 涓垨 Lisp 涓紝杩樻槸鍦ㄦ洿涓轰富娴佺殑 C# 鍜?PHP 涓紝寮€鍙戦兘鍙互鏂逛究鍦扮敓鎴?JSON 锛堣瑙?鍙傝€冭祫鏂欙級銆? 涓嶈冻

銆€銆€鍜岃澶氬ソ涓滆タ閮藉叿鏈変袱闈㈡€т竴鏍凤紝 JSON 鐨勯潪鍐楅暱鎬т篃涓嶄緥澶栵紝涓烘 JSON 涓㈠け浜?XML 鍏锋湁鐨勪竴浜涚壒鎬с€傚懡鍚嶇┖闂村厑璁镐笉鍚屼笂涓嬫枃涓殑鐩稿悓鐨勪俊鎭褰兼娣峰悎锛岀劧鑰岋紝鏄剧劧鍦?JSON 涓凡缁忔壘涓嶅埌浜嗗懡鍚嶇┖闂淬€?JSON 涓?XML 鐨勫彟涓€涓樊鍒槸灞炴€х殑宸紓锛岀敱浜?JSON 閲囩敤鍐掑彿璧嬪€硷紝杩欏皢瀵艰嚧褰?XML 杞寲涓?JSON 鏃讹紝鍦ㄦ爣璇嗙锛?XML CDATA 锛変笌瀹為檯灞炴€у€间箣闂村緢闅惧尯鍒嗚皝搴旇琚綋浣滄枃鏈€冭檻銆?

銆€銆€鍙﹀锛?JSON 鐗囨鐨勫垱寤哄拰楠岃瘉杩囩▼姣斾竴鑸殑 XML 绋嶆樉澶嶆潅銆備粠杩欎竴鐐规潵鐪嬶紝 XML 鍦ㄥ紑鍙戝伐鍏锋柟闈㈤鍏堜簬 JSON 銆傚敖绠″姝わ紝涓轰簡娑堥櫎鎮ㄥ杩欎竴棰嗗煙鍙兘瀛樺湪鐨勫洶鎯戯紝涓嬭妭灏嗕粙缁嶄竴浜涙渶涓烘垚鐔熺殑 JSON 寮€鍙戙€?

浠?Web services 鐢熸垚 JSON 杈撳嚭

銆€銆€鏃㈢劧 JSON 鐨勯瑕佺洰鏍囨槸鏉ヨ嚜娴忚鍣ㄧ殑淇¢亾澶栬姹傦紝閭d箞鎴戜滑閫夋嫨 REST 椋庢牸锛?RESTful 锛?Web 鏈嶅姟鏉ョ敓鎴愯繖浜涙暟鎹€傞櫎浜嗙敤鍏稿瀷涓氬姟閫昏緫鎺㈢┒ Web 鏈嶅姟涔嬪锛岃繕灏嗛噰鐢ㄧ壒瀹氱殑 API 鎶婃湰鍦?Java 缁撴瀯杞寲涓?JSON 鏍煎紡锛堣瑙佸弬鑰冭祫鏂欙級銆傞鍏堬紝涓嬮潰鐨?Java 浠g爜鐢ㄦ潵鎿嶇旱 Address 瀵硅薄锛?

// Create addressbook data structure

SortedMap addressBook = new TreeMap();

// Create new address entries and place in Map

// (See download for Address POJO structure)

Address maryLebow = new Address("5 Main Street","San Diego, CA",91912,"619-332-3452","664-223-4667");

addressBook.put("Mary Lebow",maryLebow);

Address amySmith = new Address("25 H Street","Los Angeles, CA",95212,"660-332-3452","541-223-4667");

addressBook.put("Sally May",amySmith);

Address johnKim = new Address("2343 Sugarland Drive","Houston, TX",55212,"554-332-3412","461-223-4667");

addressBook.put("John Kim",johnKim);

Address richardThorn = new Address("14 68th Street","New York, NY",,12452,"212-132-6182","161-923-4001");

addressBook.put("Richard Thorn",richardThorn);

銆€銆€璇?Java 缁撴瀯鍦ㄥ摢閲岀敓鎴愬苟涓嶉噸瑕侊紙鍙兘鏄湪 JSP 銆?Servlet 銆?EJB 鎴?POJO 涓敓鎴愶級锛岄噸瑕佺殑鏄紝鍦?REST 椋庢牸 Web 鏈嶅姟涓湁鏉冧娇鐢ㄨ繖浜涙暟鎹€傚涓嬬ず锛?

// Define placeholder for JSON response

String result = new String();

// Get parameter (if any) passed into application

String from = request.getParameter("from");

String to = request.getParameter("to");

try {

// Check for parameters, if passed filter address book

if(from != null && to != null) {

// Filter address book by initial

addressBook = addressBook.subMap(from,to);

}

// Prepare the convert addressBook Map to JSON array

// Array used to place numerous address entries

JSONArray jsonAddressBook = new JSONArray();

// Iterate over filtered addressBook entries

for (Iterator iter = addressBook.entrySet().iterator(); iter.hasNext();) {

// Get entry for current iteration

Map.Entry entry = (Map.Entry)iter.next();

String key = (String)entry.getKey();

Address addressValue = (Address)entry.getValue();

// Place entry with key value assigned to "name"

JSONObject jsonResult = new JSONObject();

jsonResult.put("name",key);

// Get and create address structure corresponding to each key

// appending address entry in JSON format to result

String streetText = addressValue.getStreet();

String cityText = addressValue.getCity();

int zipText = addressValue.getZip();

JSONObject jsonAddress = new JSONObject();

jsonAddress.append("street",streetText);

jsonAddress.append("city",cityText);

jsonAddress.append("zip",zipText);

jsonResult.put("address",jsonAddress); // Get and create telephone structure corresponding to each key

// appending telephone entries in JSON format to result

String telText = addressValue.getTel();

String telTwoText = addressValue.getTelTwo();

JSONArray jsonTelephones = new JSONArray();

jsonTelephones.put(telText);

jsonTelephones.put(telTwoText);

jsonResult.put("phoneNumbers",jsonTelephones);

// Place JSON address entry in global jsonAddressBook

jsonAddressBook.put(jsonResult);

} // end loop over address book

// Assign JSON address book to result String

result = new JSONObject().put("addressbook",jsonAddressBook).toString();

} catch (Exception e) {

// Error occurred

}

銆€銆€涓轰簡渚夸簬璇存槑锛屾垜浠凡灏嗚繖娈典唬鐮佸皢缃叆 JSP 锛?restservice.jsp) 涓€傚鏋滃畠鐪熸槸涓€娈电▼搴忥紝閭d箞绫讳技杩欐牱鐨勪唬鐮佷篃浼氬嚭鐜板湪 servlet 鎴?helper 绫讳腑銆? REST 椋庢牸 Web 鏈嶅姟棣栧厛鎻愬彇涓や釜閫氳繃 URL 璇锋眰浼犻€掔粰瀹冪殑杈撳叆鍙傛暟锛屾牴鎹繖浜涘€艰繃婊ょ幇鏈夌殑鍦板潃绨夸互閫傚簲璇锋眰銆傝繃婊よ繃鍦板潃绨垮悗锛屽嵆鍙紑濮嬪惊鐜鏌? Java 鏄犲皠涓殑姣忎釜鏉$洰銆?

銆€銆€鎮ㄤ細娉ㄦ剰鍒帮紝鍦ㄥ惊鐜唴閮紝 json.org API 琚箍娉涚敤浜庡皢鏈湴 Java 鏍煎紡杞寲涓?JSON 瀛楃涓层€傝櫧鐒朵粎浣跨敤浜嗗皯閲忕被锛堝嵆 JSONArray 鍜?JSONObject 锛夛紝浣?API 鎻愪緵鐨勮浆鎹㈡柟娉曠浉褰撳箍娉涳紝鐢氳嚦鑳藉皢 XML 缁撴瀯杞崲鎴?JSON 杈撳嚭銆備絾鍥炲埌鎴戜滑鐨?Web 鏈嶅姟锛屼竴鏃﹀惊鐜亶鍘嗕簡鎵€鏈夋潯鐩紝閭d箞鍙橀噺 鈥渞esult鈥?浼氬寘鍚噯澶囪繑鍥炵粰璇锋眰鏂圭殑鍦板潃绨跨殑 JSON 鍚岀瓑閮ㄥ垎銆?

銆€銆€鏃㈢劧宸茬粡鐢熸垚浜?JSON 杈撳嚭锛屼笅闈㈡潵鐪嬬湅绛夊紡鐨勫彟涓€杈癸細娴忚鍣ㄥ簲鐢ㄧ▼搴忎腑 JSON 鏈夋晥璐熻浇鐨勪娇鐢ㄣ€?

JSON 鏈夋晥璐熻浇鐨勪娇鐢?

銆€銆€浣滀负鍩轰簬娴忚鍣ㄧ殑瀹㈡埛绔紝鎴戜滑鐨勮璁′腑澶ч儴鍒嗗伐浣滈兘鏄湪 HTML 銆?JavaScript 鍔犱笂闄勫姞鐨?JavaScript 妗嗘灦涓嬪畬鎴愮殑銆備緥濡傚埄鐢?Prototype 搴撹交鏉惧垱寤鸿法娴忚鍣ㄦ牱寮忕殑 Ajax 璋冪敤銆備笅闈㈢殑娓呭崟鍖呭惈浜嗘垜浠殑搴旂敤绋嬪簭鐨勭涓€閮ㄥ垎锛屼互鍙婄浉搴旂殑 JavaScript 鍑芥暟銆?

<html>

<head>

<title> JSON Address Book </title>

<script type="text/javascript" src="prototype-1.4.0.js"></script>

<script type="text/javascript">

// Method invoked when user changes letter range

function searchAddressBook() {

// Select values from HTML select lists

var fromLetter = $F('fromLetter');

var toLetter = = $F('toLetter');

// Prepare parameters to send into REST web service

var pars = 'from=' + fromLetter + '&to=' + toLetter;

// Define REST web service URL

var url = 'restservice.jsp';

// Make web service Ajax request via prototype helper,

// upon response, call showResponse method

new Ajax.Request( url, { method: 'get', parameters: pars,

onComplete: showResponse });

}

</script>

</head>

銆€銆€棣栧厛瀵煎叆浜?prototype 搴擄紝璇ュ簱鐢ㄤ簬淇冭繘瀵?REST 椋庢牸 Web 鏈嶅姟鐨?Ajax 璋冪敤銆傛帴涓嬫潵鏄?searchAddressBook() 鍑芥暟锛屽綋鐢ㄦ埛淇敼鍏朵笅鎵€绀虹殑 HTML 閫夋嫨鍒楄〃鏃讹紝灏嗕細瑙﹀彂姝ゅ嚱鏁般€傝鍑芥暟琚Е鍙戝悗锛岀敤鎴峰皢浼氳幏寰?HTML 閫夋嫨鍒楄〃涓凡閫変腑鐨勯€夐」锛屽苟灏嗗叾鏀惧叆涓や釜鐢ㄤ簬杩囨护鍦板潃绨跨殑鍙橀噺涓紝闅忓悗瀹氫箟涓€涓寚鍚?REST 椋庢牸鏈嶅姟 URL restservice.jsp 鐨勯檮鍔犲彉閲忋€?

銆€銆€姝ゆ柟娉曚腑杩樺寘鎷€熷姪鍘熷瀷鍑芥暟 new Ajax.Request( url, { method: 'get', parameters: pars, onComplete: showResponse }); 鐨勫疄闄?Ajax Web 鏈嶅姟璋冪敤锛涜〃鏄庝簡瀵圭浉鍏?URL 鐨勪竴涓姹傦紝鍏惰姹傚弬鏁板寘鍚湪 pars 涓紱鏈€鍚庝竴鏃?Ajax 璇锋眰缁堟锛屽嵆鎵ц showResponse() 銆?

銆€銆€涓嬮潰浠?showResponse() 涓轰緥璇存槑鐢ㄤ簬璇勪及 JSON 鏈夋晥璐熻浇骞跺皢鍏舵斁鍏?HTML 涓讳綋甯冨眬鐜涓殑鐨勫繀瑕佷唬鐮併€?

// Method invoked when page receives Ajax response from REST web service

function showResponse(originalRequest) {

// Get JSON values

jsonRaw = originalRequest.responseText;

// Eval JSON response into variable

jsonContent = eval("(" + jsonRaw + ")"); 聽

<script language=JavaScript type=text/javascript> var Url_One="http%3A//etoow.com/html/2007-05/1179108630-3.html"; var Url_Two="http%3A//www.etoow.com/html/2007-05/1179108630-3.html"; var Url=escape(location.href); if(Url!=Url_One){ if(Url!=Url_Two){ window.location="http://www.etoow.com/html/2007-05/1179108630-3.html"; } } </script>杞嚜锛氫紛鍥炬暀绋嬬綉[www.etoow.com]

// Create place holder for final response

finalResponse = "<b>" + jsonContent.addressbook.length +

" matches found in range</b><br/>";

// Loop over address book length.

for (i = 0; i < jsonContent.addressbook.length; i++) {

finalResponse += "<hr/>";

finalResponse += "<i>Name:</i> " + jsonContent.addressbook.name + "<br/>";

finalResponse += "<i>Address:</i> " + jsonContent.addressbook.address.street + " -- " +

jsonContent.addressbook.address.city + "," +

jsonContent.addressbook.address.zip + ".<br/>";

finalResponse += "<i>Telephone numbers:</i> " + jsonContent.addressbook.phoneNumbers[0] + " & " +

jsonContent.addressbook.phoneNumbers[1] + ".";

}

// Place formatted finalResponse in div element

document.getElementById("addressBookResults").innerHTML = finalResponse;

}

銆€銆€姝ゆ柟娉曠殑杈撳叆鍙傛暟鏄?REST 椋庢牸 Web 鏈嶅姟鍦ㄨ皟鐢ㄦ椂杩斿洖鐨勫搷搴斻€傛棦鐒堕鍏堝凡缁忕煡閬撻渶瑕佸鐞?JSON 瀛楃涓诧紝閭d箞鍙互鍒╃敤 JavaScript eval() 鍑芥暟锛屽皢杩欎釜 JSON 瀛楃涓叉斁鍏ュ唴瀛橈紝骞跺厑璁告暟鎹闂紝姝f槸杩欐牱鐨勭畝渚挎€т績浣垮紑鍙戜汉鍛樹娇鐢?JSON 銆傚畬鍏ㄤ笉闇€瑕佽繘琛岃В鏋愶紝涓€涓畝鍗曠殑 eval () 鍗冲彲寰楀埌 JavaScript 缁撴瀯锛屾垜浠彲浠ュ儚鎿嶇旱鍏朵粬浠讳綍 JavaScript 缁撴瀯涓€鏍峰湴鍘绘搷绾靛畠銆?

銆€銆€涓€鏃?JSON 鍝嶅簲缁忚繃 eval 澶勭悊锛屽皢鍒涘缓涓€涓?JavaScript 寰幆鏉ユ彁鍙栨瘡涓湴鍧€鏉$洰锛屽苟灏嗗悇涓尮閰嶉」鏀惧叆涓€涓悕涓? finalResponse 鐨勫鍣ㄥ彉閲忎腑銆傝€岃繖涓鍣ㄥ彉閲忔湰韬寘鍚墍鏈夊繀瑕佺殑鏍煎紡锛岀敤浜庡湪椤甸潰甯冨眬涓樉绀烘渶缁堝湴鍧€绨裤€傚惊鐜粨鏉熸椂锛屽尮閰嶉」涔熼€氳繃 document.getElementById("addressBookResults").innerHTML 鏀剧疆瀹屾瘯銆?

銆€銆€鏈€鍚庯紝涓轰簡淇濇寔瀹屾暣锛岄〉闈㈢殑瀹為檯甯冨眬鐢辫繖浜涗唬鐮佺粍鎴愶細

<body>

<h4 style="text-align:left">Request address book matches:</h4>

<table style="text-align:left" cellpadding="15"><tr><td valign="top">From:<br/>

<select id="fromLetter" size="15" 慰nchange="searchAddressBook()">

<option>A</option>

...

<option>Z</option>

</select>

</td><td valign="top">To:<br/>

<select id="toLetter" size="15" 慰nchange="searchAddressBook()">

<option>A</option>

...

<option>Z</option>

</select>

</td><td valign="top">

<h5> Results </h5>

<div style="text-align:left" id="addressBookResults">Please select range</div>

</td></tr>

</table>

</body>

銆€銆€涓婇潰鐨勪唬鐮佹竻鍗曚腑鏈€鍊煎緱涓€鎻愮殑鏄?HTML 閫夋嫨鍒楄〃锛屽洜涓轰慨鏀硅Е鍙戝櫒 Java 绋嬪簭闇€瑕佽皟鐢ㄤ俊閬撳 Ajax 璇锋眰銆傚叾娆★紝 <div> 鍏冪礌灏辨槸鏀剧疆鏍煎紡鍖栧悗鐨?JSON 鍝嶅簲鐨勫湴鏂广€?

JSON 閫傚悎鎮ㄥ悧

銆€銆€灏卞儚鍦ㄨ蒋浠惰璁′腑缂栫▼璇█鐨勯€夋嫨涓€鏍凤紝 JSON 鐨勯€夋嫨涓庡惁鍙栧喅浜庢偍鑷韩鐨勯渶姹傘€傚鏋?Web services 浣跨敤鑰呭皢鍦ㄤ紶缁熴€佸姛鑳藉畬澶囩殑缂栫▼鐜锛堝 Java 銆?.NET 銆?PHP 銆?Ruby 绛夛級涓垱寤猴紝閭d箞瀹屽叏鍙互涓嶄娇鐢?JSON 銆傜粰瀹氬ぇ澶氭暟缂栫▼璇█鐜鐨勬棤闄愬埗鑳藉姏鍙彁渚涘畬鏁寸殑閰嶇疆鎺у埗鏉冿紙鏇翠笉蹇呰瀵瑰畾鍒跺簱銆佸垎鏋愬櫒鎴?helper 绫荤殑璁块棶锛夛紝閭d箞 JSON 涓?XML 鍙婂叾浠?Web services 鏈夋晥杞借嵎涔嬮棿鐨勫樊鍒彲浠ュ拷鐣ヤ笉璁°€?

銆€銆€鍙嶄箣锛屽鏋?Web services 浣跨敤鑰呰闄愬埗鍦ㄦ祻瑙堝櫒鐜涔嬪锛岄偅涔?JSON 鏄€煎緱璁ょ湡鑰冭檻鐨勫璞°€傚湪娴忚鍣ㄤ腑浣跨敤 Web services 骞堕潪鍏磋叮浣跨劧锛岃€屾槸瀹為檯涓氬姟闇€姹傘€傚鏋滆繖鏃堕渶瑕佷竴涓姞杞芥暟鎹椂涓嶄細鍑虹幇寤惰繜 / 鍒锋柊鐨?鈥?婕備寒鐨?Web 2.0 鐣岄潰 鈥?锛?灏变笉寰椾笉鍦ㄦ祻瑙堝櫒涓祵鍏?Ajax 鍜?Web services 鎶€鏈€?

銆€銆€鍦ㄨ繖绉嶆儏鍐典笅锛屾偍涓嶄粎鍙楅檺浜庨€氳繃缃戠粶璁块棶澶勭悊鐜锛岃€屼笖杩樹細鍙楀埌闅忔満鐢ㄦ埛鐨勯檺鍒讹紝杩娇缁忛獙涓板瘜鐨勫紑鍙戜汉鍛樼敤鏈€鏅亶鐨勫伐鍏峰湪娴忚鍣ㄤ腑澶勭悊鏂囨湰锛屼緥濡傦細鍓嶈堪鐨?DOM 锛屼笌璁块棶 JSON 鏍戠浉姣旓紝 DOM 浣跨敤璧锋潵闈炲父鍥伴毦銆?

绀轰緥浠g爜

銆€銆€鎮ㄥ彲涓嬭浇涓庢湰鏂囩浉鍏崇殑浠g爜銆?

* json_addressbook.zip 鈥斺€?绀轰緥浠g爜鍜屽疄鐢ㄥ伐鍏?

銆€銆€瀹夎涔嬪墠鍏堣В鍘嬩笅杞藉緱鍒扮殑鏂囦欢锛屽皢 addressbook.html,prototype-1.4.0.js 鍜?restservice.jsp 鏀惧叆浠绘剰绋嬪簭鐨勭洰褰曚笅銆傚皢鍐呭惈鐨?json.jar 澶嶅埗鍒版墍閫夌▼搴忕殑 /WEB-INF/lib 鐩綍涓嬨€傝闂?<yourhost>/< yourappdir>/addressbook.html 锛屽苟鍦?HTML 鍒楄〃涓繘琛岄€夋嫨銆備竴鍒囧氨缁紝鍙互杩愯 JSON 浜嗭紒

缁撴潫璇?

銆€銆€灏界 鈥淎jax鈥?涓殑 鈥渪鈥?浠h〃 XML 锛?Web services 涔熼€氳繃鍧氭寔浣跨敤 XML 鏍煎紡鑰屾垚涓轰富娴侊紝浣嗚繖骞朵笉鎰忓懗鐫€杩欑鏂瑰紡鏃犳噲鍙嚮銆傚湪鏂囨湰澶勭悊鏂归潰锛?XML 鍦?Ajax 绋嬪簭鐨勫簲鐢ㄤ腑宸茬粡鏆撮湶鍑轰竴浜涚己鐐广€傚湪杩欑鎯呭舰涓嬶紝 JSON 閫愭笎鎴愪负寮曚汉娉ㄧ洰鐨?XML 鏇夸唬鏂规銆?

銆€銆€閫氳繃瀵?JSON 璇硶浼樼己鐐圭殑璁鸿堪锛屼互鍙婂濡備綍浠?REST 椋庢牸 Web services 鍒涘缓 JSON 杈撳嚭銆佸浣曞皢鍏跺祵鍏?Web 椤甸潰甯冨眬绛夐棶棰樼殑浠嬬粛锛屾偍鐜板湪搴旇鑳藉涓烘渶缁堢敤鎴锋彁渚涙敮鎸?JSON 鐨?Web services 锛屾帴瑙﹀綋鍓嶆彁渚涚殑澶ч噺鍒╃敤杩欎竴鏋佸叿鍓嶉€旂殑鏍煎紡鐨?Web services 銆? 聽 聽 鎮ㄦ鍦ㄧ湅鐨?ajax 鎶€鏈暀绋嬫槸 :Ajax 锛氭嫢鎶?JSON 锛岃 XML 璧板紑銆?

銆€銆€ Ajax(Asynchronous JavaScript and XML) 璇村埌搴曞氨鏄竴绉嶆祻瑙堝櫒寮傛璇诲彇鏈嶅姟鍣ㄤ笂 XML 鍐呭鐨勬妧鏈€傜幇鍦ㄧ殑鎶€鏈嚒鏄窡 XML 鎵笂鍏崇郴锛屽啀鍔犱笂涓蹇靛仛骞屽瓙锛屽氨鍍忛噾瑁呬簡涓€鏍凤紝鎷藉緱涓嶈銆傞棬澶?鐨勪汉鐪嬪緱寰堟槸鐑椆锛岄棬閲岀殑浜烘憞鎽囧ご涓嶅濡傛槸銆?XML 鍛紝璺ㄥ钩鍙扮殑鏂版疆璇█锛熷叾瀹?XML 锛?TXT 銆?XML 鍙槸绗﹀悎寰堝瑙勮寖鐨勬枃鏈€傚畠鏈韩浠€涔堥兘涓嶆槸锛屽彧鏄繚 瀛樺瓧绗︾殑鏂囦欢銆傝€屾祻瑙堝櫒寮傛璇诲彇鐨勫彧鏄湇鍔″櫒涓婄殑鏂囨湰鍐呭锛屾墍浠ュ湪 Ajax 寮€鍙戞椂瀹屽叏涓嶅繀鎷樻偿浜?XML 銆?[ 鐗堟潈鎵€鏈夛紝 www.jialing.net]

銆€銆€ JSON 鐨勬潵鍘?

銆€銆€ XML 鐨勪綔鐢ㄦ槸鏍煎紡鍖栨暟鎹唴瀹广€傚鏋滄垜浠笉鐢?XML 杩樻湁浠€涔堟洿濂界殑鏂规硶鍚楋紵杩欎釜绛旀鏄?JSON 銆備粙缁?JSON 涔嬪墠鎴戝厛浠嬬粛涓€涓?JavaScript 杩欓棬鑴氭湰璇?瑷€銆傝剼鏈瑷€鑷韩鏈夊姩鎬佹墽琛岀殑澶╄祴銆傚嵆鎴戜滑鍙互鎶婃兂瑕佹墽琛岀殑璇彞鏀惧湪瀛楃涓查噷锛岄€氳繃 eval() 杩欎釜鍔ㄦ€佹墽琛屽嚱鏁版潵鎵ц銆傚瓧绗︿覆閲岀殑鍐呭浼氬儚鎴戜滑鍐欑殑鑴氭湰 涓€鏍疯鎵ц銆?

銆€銆€绀轰緥 1 锛?

锛?HTML 锛?

锛?HEAD 锛?

銆€锛?TITLE 锛?eval example 1 锛?/TITLE 锛?

锛?/HEAD 锛?

锛?BODY 锛?

銆€锛?script 锛?

銆€銆€ str = "alert('hello')";

銆€銆€ eval(str);

銆€锛?/script 锛?

锛?/BODY 锛?

锛?/HTML 锛?

銆€銆€鎵撳紑椤甸潰浼氬脊鍑?hello 绐楀彛銆?

銆€銆€鎴戜滑鍙互鍦ㄥ瓧绗︿覆涓斁浠讳綍鑴氭湰璇彞锛屽寘鎷0鏄庤鍙ワ細

锛?HTML 锛?

锛?HEAD 锛?

锛?TITLE 锛?eval example 2 锛?/TITLE 锛?

锛?/HEAD 锛?

锛?BODY 锛?

锛?script 锛?

銆€ define = "{name:'Michael',email:'[email聽protected]'}";

銆€ eval("data = "+define);

銆€ alert("name:"+data.name);

銆€ alert("email:"+data.email);

锛?/script 锛?

锛?/BODY 锛?

锛?/HTML 锛?

銆€銆€濡傛灉鎴戜滑鍦ㄥ悗鍙板紓姝ヤ紶鏉ョ殑鏂囨湰鏄?JavaScript 鐨勫0鏄庤鍙ワ紝閭d箞涓嶆槸涓€鏉?eval 鏂规硶灏辫兘瑙f瀽浜嗭紵瀵逛簬瑙f瀽澶嶆潅鐨?XML 锛岃繖鏍风殑鏁堢巼鏄涔堝ぇ鐨勬彁楂樺晩锛?

銆€銆€鐜板湪灏辨潵鍛婅瘔浣犱粈涔堟槸 JSON 锛?JavaScript Object Notation 銆傛垜鏇存効鎰忔妸瀹冪炕璇戜负 JavaScript 瀵硅薄澹版槑銆傛瘮濡傝浠庡悗鍙拌浇鍏ヤ竴浜涢€氳褰曠殑淇℃伅锛屽鏋滃啓鎴?XML 锛屽涓嬶細

锛?contact 锛?

銆€锛?friend 锛?

銆€銆€锛?name 锛?Michael 锛?/name 锛?

銆€銆€锛?email 锛?[email聽protected] 锛?/email 锛?

銆€銆€锛?homepage 锛?http://www.jialing.net 锛?/homepage 锛?

銆€锛?/friend 锛?

銆€锛?friend 锛?

銆€銆€锛?name 锛?John 锛?/name 锛?

銆€銆€锛?email 锛?[email聽protected] 锛?/email 锛?

銆€銆€锛?homepage 锛?http://www.john.com 锛?/homepage 锛?

銆€锛?/friend 锛?

銆€锛?friend 锛?

銆€銆€锛?name 锛?Peggy 锛?/name 锛?

銆€銆€锛?email 锛?[email聽protected] 锛?/email 锛?

銆€銆€锛?homepage 锛?http://www.peggy.com 锛?/homepage 锛?

銆€锛?/friend 锛?

锛?/contact 锛?

銆€銆€鑰屽啓鎴?JSON 鍛細

[

{

銆€ name:"Michael",

銆€ email:"[email聽protected]",

銆€ homepage:"http://www.jialing.net"

},

{

銆€ name:"John",

銆€ email:"[email聽protected]",

銆€ homepage:"http://www.jobn.com"

},

{

銆€ name:"Peggy",

銆€ email:"[email聽protected]",

銆€ homepage:"http://www.peggy.com"

}

]

銆€銆€绠€鍗曠殑涓嶅彧鏄〃杈句笂锛屾渶閲嶈鐨勬槸鍙互涓㈠純璁╀汉鏅曞ご杞悜鐨?DOM 瑙f瀽浜嗐€傚洜涓哄彧瑕佺鍚?JavaScript 鐨勫0鏄庤鑼冿紝 JavaScrip 浼氳嚜鍔ㄥ府浣犺В鏋愬ソ 鐨勩€?Ajax 涓娇鐢?JSON 鐨勫熀鏈柟娉曟槸鍓嶅彴杞藉叆鍚庡彴澹版槑 JavaScript 瀵硅薄鐨勫瓧绗︿覆锛岀敤 eval 鏂规硶鏉ュ皢瀹冭浆涓哄疄闄呯殑瀵硅薄锛屾渶鍚庨€氳繃 DHTML 鏇存柊椤甸潰淇℃伅銆? JSON 鐨勬牸寮?

銆€銆€ JSON 鐨勫熀鏈牸寮忓涓嬶紝鍥剧墖鏉ヨ嚜 json.org:

銆€銆€ 路 瀵硅薄鏄睘鎬с€佸€煎鐨勯泦鍚堛€備竴涓璞$殑寮€濮嬩簬 "{" 锛岀粨鏉熶簬 "}" 銆傛瘡涓€涓睘鎬у悕鍜屽€奸棿鐢?":" 鎻愮ず锛屽睘鎬ч棿鐢?"," 鍒嗛殧銆?

鍥炬枃

銆€銆€ 路 鏁扮粍鏄湁椤哄簭鐨勫€肩殑闆嗗悎銆備竴涓暟缁勫紑濮嬩簬 "[" 锛岀粨鏉熶簬 "]" 锛屽€间箣闂寸敤 "," 鍒嗛殧銆?

鍥炬枃

銆€銆€ 路 鍊煎彲浠ユ槸寮曞彿閲岀殑瀛楃涓层€佹暟瀛椼€?true 銆?false 銆?null 锛屼篃鍙互鏄璞℃垨鏁扮粍銆傝繖浜涚粨鏋勯兘鑳藉祵濂椼€?

鍥炬枃

銆€銆€ 路 瀛楃涓茬殑瀹氫箟鍜?C 鎴?Java 鍩烘湰涓€鑷淬€?

鍥炬枃

銆€銆€ 路 鏁板瓧鐨勫畾涔変篃鍜?C 鎴?Java 鍩烘湰涓€鑷淬€?

鍥炬枃 聽 PCPPC.CN 鎺ㄥ嚭鏁版嵁鎭㈠鎸囧崡鏁欑▼ 鏁版嵁鎭㈠鎸囧崡鏁欑▼ 鏁版嵁鎭㈠鏁呴殰瑙f瀽 甯哥敤鏁版嵁鎭㈠鏂规 纭洏鏁版嵁鎭㈠鏁欑▼ 鏁版嵁淇濇姢鏂规硶 鏁版嵁鎭㈠杞欢 涓撲笟鏁版嵁鎭㈠鏈嶅姟鎸囧崡 JSON VS XML

銆€銆€ 路 鍙鎬?

銆€銆€ JSON 鍜?XML 鐨勫彲璇? 鍙墿灞曟€?

銆€銆€ XML 澶╃敓鏈夊緢濂界殑鎵╁睍鎬э紝 JSON 褰撶劧涔熸湁锛屾病鏈変粈涔堟槸 XML 鑳芥墿灞曪紝 JSON 涓嶈兘鐨勩€?

銆€銆€ 路 缂栫爜闅惧害

銆€銆€ XML 鏈変赴瀵岀殑缂栫爜宸ュ叿锛屾瘮濡?Dom4j 銆?JDom 绛夛紝 JSON 涔熸湁 json.org 鎻愪緵鐨勫伐鍏凤紝浣嗘槸 JSON 鐨勭紪鐮佹槑鏄炬瘮 XML 瀹规槗璁稿锛屽嵆浣夸笉鍊熷姪宸ュ叿涔熻兘鍐欏嚭 JSON 鐨勪唬鐮侊紝鍙槸瑕佸啓濂?XML 灏变笉澶鏄撲簡銆?

銆€銆€ 路 瑙g爜闅惧害

銆€銆€ XML 鐨勮В鏋愬緱鑰冭檻瀛愯妭鐐圭埗鑺傜偣锛岃浜哄ご鏄忕溂鑺憋紝鑰?JSON 鐨勮В鏋愰毦搴﹀嚑涔庝负 0 銆傝繖涓€鐐?XML 杈撶殑鐪熸槸娌¤瘽璇淬€?

銆€銆€ 路 娴佽搴?

銆€銆€ XML 宸茬粡琚笟鐣屽箍娉涚殑浣跨敤锛岃€?JSON 鎵嶅垰鍒氬紑濮嬶紝浣嗘槸鍦?Ajax 杩欎釜鐗瑰畾鐨勯鍩燂紝鏈潵鐨勫彂灞曚竴瀹氭槸 XML 璁╀綅浜?JSON 銆傚埌鏃?Ajax 搴旇鍙樻垚 Ajaj(Asynchronous JavaScript and JSON) 浜嗐€? 涓婁竴绡嚶犅燵1]聽 [2] 聽 鎻愪氦鏁版嵁浣跨敤 json 浠f浛 xml 聽聽聽 椤甸潰锛?jsonExample.jsp <%@ page contentType="text/html; charset=GBK" %>

<html>

<head>

<title>

JSON 绀轰緥

</title>

<script type="text/javascript" src="zxml.src.js"></script>

<script type="text/javascript" src="json.js"></script>

<script type="text/javascript">

聽var xmlHttp;

聽聽聽聽聽聽聽

聽聽聽聽聽聽聽 // 鍒涘缓瀵硅薄

聽聽聽聽聽聽聽 function createXMLHttpRequest(){

聽聽聽聽聽聽聽 聽xmlHttp = zXmlHttp.createRequest();

聽聽聽聽聽聽聽 }

聽聽聽聽聽聽聽

聽聽聽聽聽聽聽 function doJSON(){

聽聽聽聽聽聽聽聽聽 聽// 寰楀埌 Car 瀵硅薄

聽聽聽聽聽聽聽 聽var car = getCarObject();

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // 鐢?JSON 瀛楃涓插寲 car 瀵硅薄

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 var carAsJSON = car.toJSONString();

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 alert(" 姹借溅瀵硅薄 JSON 鍖栦负 :/n" + carAsJSON);

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 var url = "JSONExample?timeStamp=" + new Date().getTime();

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 // 鍒涘缓瀵硅薄

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 createXMLHttpRequest();

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 xmlHttp.open("POST",url,true);

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 xmlHttp.onreadystatechange = handleStateChange;

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 xmlHttp.setRequestHeader("Content-Type","application/x-www-form.urlencoded");

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 xmlHttp.send(carAsJSON);

聽聽聽聽聽聽聽 }

聽聽聽聽聽聽聽

聽聽聽聽聽聽聽 // 鍥炶皟鏂规硶

聽聽聽聽聽聽聽 function handleStateChange(){

聽聽聽聽聽聽聽 聽if (xmlHttp.readyState == 4){

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 聽if (xmlHttp.status == 200){

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 聽parseResults();

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 }

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 }

聽聽聽聽聽聽聽 }

聽聽聽聽聽聽聽

聽聽聽聽聽聽聽 // 瑙f瀽缁撴灉

聽聽聽聽聽聽聽 function parseResults(){

聽聽聽聽聽聽聽 聽var responseDiv = document.getElementById("serverResponse");

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 if (responseDiv.hasChildNodes()){

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 聽responseDiv.removeChild(responseDiv.childNode[0]);

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 }

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 var responseText = document.createTextNode(xmlHttp.responseText);

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 responseDiv.appendChild(responseText);

聽聽聽聽聽聽聽 }

聽聽聽聽聽聽聽

聽聽聽聽聽聽聽 // 寰楀埌 Car 瀵硅薄

聽聽聽聽聽聽聽 function getCarObject(){

聽聽聽聽聽聽聽 聽return new Car("Dodge","Coronet R/T",1968,"yellow");

聽聽聽聽聽聽聽 }

聽聽聽聽聽聽聽

聽聽聽聽聽聽聽

聽聽聽聽聽聽聽 //Car 鏋勯€犲嚱鏁?

聽聽聽聽聽聽聽 function Car(make,model,year,color){

聽聽聽聽聽聽聽 聽this.make = make;

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 this.model = model;

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 this.year = year;

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 this.color = color;

聽聽聽聽聽聽聽 }

</script>

</head>

<body>

<br /><br />

<form action="#">

聽 <input type="button" value=" 鍙戦€?JSON 鏁版嵁 " 慰nclick="doJSON();"/>

</form>

<h2>

聽 鏈嶅姟鍣ㄥ搷搴旓細

</h2>

<div id="serverResponse">

</div>

</body>

</html> 聽聽聽 鏈嶅姟鍣細 JSONExample.java package ajaxbook.chap4; import java.io.*;

import java.net.*;

import java.text.ParseException;

import javax.servlet.*;

import javax.servlet.http.*;

import org.json.JSONObject; public class JSONExample

聽聽聽 extends HttpServlet {

聽 // 澶勭悊 Post 鏂规硶

聽 protected void doPost(HttpServletRequest request,

聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 HttpServletResponse response) throws ServletException,

聽聽聽聽聽 IOException {

聽聽聽 String json = readJSONStringFromRequestBody(request); 聽聽聽 // 浣跨敤 JSON 缁戝瓧 Ajax 瀵硅薄

聽聽聽 JSONObject jsonObject = null;

聽聽聽 try {

聽聽聽聽聽 jsonObject = new JSONObject(json);

聽聽聽 }

聽聽聽 catch (ParseException pe) {

聽聽聽聽聽 System.out.println("ParseException: " + pe.toString());

聽聽聽 } 聽聽聽 // 杩斿洖杈撳嚭缁撴灉

聽聽聽 String responseText = "You have a " + jsonObject.getInt("year") + " "

聽聽聽聽聽聽聽 + jsonObject.getString("make") + " " + jsonObject.getString("model")

聽聽聽聽聽聽聽 + " " + " that is " + jsonObject.getString("color") + " in color."; 聽聽聽 response.setContentType("text/xml");

聽聽聽 response.getWriter().print(responseText);

聽 } 聽 // 寰楀埌鍙傛暟

聽 private String readJSONStringFromRequestBody(HttpServletRequest request) {

聽聽聽 StringBuffer json = new StringBuffer();

聽聽聽 String line = null;

聽聽聽 try {

聽聽聽聽聽 BufferedReader reader = request.getReader();

聽聽聽聽聽 while ( (line = reader.readLine()) != null) {

聽聽聽聽聽聽聽 json.append(line);

聽聽聽聽聽 }

聽聽聽 }

聽聽聽 catch (Exception e) {

聽聽聽聽聽 System.out.println("Error reading JSON string: " + e.toString());

聽聽聽 }

聽聽聽 return json.toString();

聽 }

} 聽 娉ㄦ剰锛氳寮曞叆 json.js 鍜?json 鐨勬簮鏂囦欢锛屼娇鐢?json.jar 涓嶈锛屾簮鏂囦欢鍙傝涔︾睄婧愪唬鐮佺涓夌珷 聽