鏃墮棿錛?007-03-27 浣滆咃細Daniel Rubio 嫻忚嬈℃暟錛?7706 鏈枃鍏抽敭瀛楋細JSON, JavaScript Object Notation, JavaScript, XML, Dev Toolbox, WebLogic Server, Daniel Rubio |
|
銆銆XML鈥斺旇繖縐嶇敤浜庤〃紺哄鎴風涓庢湇鍔″櫒闂存暟鎹氦鎹㈡湁鏁堣礋杞界殑鏍煎紡錛屽嚑涔庡凡緇忔垚浜哤eb services鐨勫悓涔夎瘝銆傜劧鑰岋紝鐢變簬Ajax鍜孯EST鎶鏈殑鍑虹幇褰卞搷浜嗗簲鐢ㄧ▼搴忔灦鏋勶紝榪欒揩浣夸漢浠紑濮嬪姹俙XML鐨勬浛浠e搧錛屽錛欽avaScript Object Notation錛圝SON錛夈?/p>
銆銆JSON 浣滀負涓縐嶆洿杞匯佹洿鍙嬪ソ鐨?Web services瀹㈡埛绔殑鏍煎紡錛堝閲囩敤嫻忚鍣ㄧ殑褰㈠紡鎴栬闂?REST椋庢牸 Web鏈嶅姟鐨凙jax搴旂敤紼嬪簭鐨勫艦寮忥級寮曡搗浜?Web 鏈嶅姟渚涘簲鍟嗙殑娉ㄦ剰銆?/p>
銆銆鏈枃灝嗛槓榪癑SON鍦╓eb services璁捐涓鍙楁帹宕囩殑鍘熷洜錛屼互鍙婂畠浣滀負XML鏇夸唬鏂規鐨勪富瑕佷紭鍔垮拰灞闄愭с傛枃涓繕浼氭繁鍏ユ帰璁細闅忕潃鐩稿簲鐨刉eb 鏈嶅姟瀹㈡埛绔夋嫨浣跨敤JSON錛屽浣曟墠鑳戒究鎹峰湴鍦↗ava Web services涓敓鎴怞SON杈撳嚭銆?/p>
銆銆XML璁捐鍘熺悊宸茬粡鍙戝竷浜嗗皢榪戝崄騫淬傛椂鑷充粖鏃ワ紝榪欑鏍囪璇█宸茬粡鍦ㄥ箍闃旂殑杞歡搴旂敤棰嗗煙涓崰鎹簡涓誨鍦頒綅銆備粠Java銆?NET絳変富嫻佸鉤鍙頒腑鐨勯厤緗拰閮ㄧ講鎻忚堪絎﹀埌搴旂敤闆嗘垚鍦烘櫙涓洿澶嶆潅鐨勫簲鐢紝XML涓庣敓淇辨潵鐨勮璦鏃犲叧鎬т嬌涔嬪湪杞歡鏋舵瀯甯堝績鐩腑鍗犳嵁鐫鐙壒鐨勫湴浣嶃備絾鍗充究鏈钁楀悕鐨刋ML鏉冨▉涔熶笉寰椾笉鎵胯錛氬湪鏌愪簺鐜涓紝XML鐨勪嬌鐢ㄥ凡緇忚秴鍑轟簡瀹冭嚜韜兘鍔涚殑鏋侀檺銆?/p>
銆銆鍥寸粫Ajax鍘熺悊鏋勫緩鐨勯偅浜沇eb搴旂敤紼嬪簭鏈鑳借鏄嶺ML鐨勭敓瀛樿兘鍔涳紝浠庤繖涓鐐規潵鐪嬶紝涓縐嶆柊鐨勬湁鏁堣礋杞芥牸寮忕殑鍙戝睍澹ぇ涔熷緱鐩婁簬XML銆傝繖縐嶆柊鐨勬湁鏁堣礋杞芥牸寮忓氨鏄疛avaScript Object Notation (JSON)銆傚湪鎺㈢儲榪欑鏂扮殑鏍囪璇█鐨勫鏉傛т箣鍓嶏紝棣栧厛鏉ュ垎鏋愪竴涓嬪湪榪欑鐙壒鐨勮璁″艦寮忎腑錛孹ML鍏鋒湁鍝簺灞闄愭с?/p>
銆銆Ajax寤虹珛浜嗕竴涓敤浜庝粠榪滅▼Web services鍙戦佸拰鎺ユ敹鏁版嵁鐨勭嫭绔嬩俊閬擄紝浠庤屽厑璁竁eb紼嬪簭鎵ц淇¢亾澶栵紙out-of-band錛夊鎴風/鏈嶅姟鍣ㄨ皟鐢ㄣ傞氫織鍦拌錛孉jax紼嬪簭涓殑鏇存柊鍜屽鑸簭鍒楀湪鍏稿瀷鐨勫鎴風/鏈嶅姟鍣ㄧ幆澧冧箣澶栧畬鎴愶紝鍦ㄥ悗鍙幫紙鍗充俊閬撳錛夋帴鍙楀埌淇℃伅鍚庯紝蹇呴』榪涜涓嬈″畬鏁寸殑灞忓箷鍒鋒柊銆傛洿澶氳儗鏅俊鎭紝璇峰弬闃匘avid Teare鐨?Ajax綆浠?/a>錛圖ev2Dev錛夈?/p>
銆銆榪欎簺搴旂敤紼嬪簭鏇存柊閫氬父鏄氳繃REST椋庢牸錛圧ESTful錛塛eb services鑾峰緱鐨勶紝涓鏃﹁鐢ㄦ埛鐨勬祻瑙堝櫒鎺ユ敹鍒幫紝灝遍渶瑕佹暣鍚堝埌HTML欏甸潰鐨勬諱綋甯冨眬涔嬩腑錛岃繖姝f槸XML鍙戞尌寮哄ぇ鍔涢噺鐨勫満鍚堛傚敖綆¤繎騫存潵錛岃剼鏈璦鏀寔鍜屾彃浠舵敮鎸佸凡浣垮ぇ澶氭暟涓繪祦嫻忚鍣ㄧ殑鍔熻兘寰楀埌浜嗗己鍖栵紝浣嗚澶氱紪紼嬩換鍔′緷鐒墮毦浜庡紑灞曪紝鍏朵腑涔嬩竴灝辨槸鎿嶇旱鎴栧鐞嗘枃鏈紝榪欓氬父鏄嬌鐢―OM瀹炵幇鐨勩?/p>
銆銆閲囩敤DOM鐨勫鏉傛ф簮浜庡叾鍩轟簬鍑芥暟鐨勬牴錛岃繖浣垮緱瀵規暟鎹爲鐨勭畝鍗曚慨鏀規垨璁塊棶閮介渶瑕佽繘琛屾棤鏁版鏂規硶璋冪敤銆傛澶栵紝浼楁墍鍛ㄧ煡錛孌OM鍦ㄥ悇縐嶆祻瑙堝櫒涓殑瀹炵幇緇嗚妭涓嶅敖鐩稿悓錛岃繖涓榪囩▼灝嗗甫鏉ユ瀬涓哄鏉傜殑緙栫▼妯″紡錛屽叾璺ㄦ祻瑙堝櫒鍏煎鎬у嚭鐜伴棶棰樼殑鍙兘鎬ф瀬澶с傛帴涓嬫潵鐨勯棶棰樻樉鑰屾槗瑙侊紝閭e氨鏄細濡備綍浣夸竴縐嶆爣璁拌璦杞繪澗闆嗘垚鍒癏TML欏甸潰涓互婊¤凍Ajax鐨勮姹傦紵 銆銆闂鐨勭瓟妗堝氨鏄細鍒╃敤鎵鏈変富嫻佹祻瑙堝櫒涓殑涓縐嶉氱敤緇勪歡鈥斺擩avaScript寮曟搸銆俋ML闇瑕佷嬌鐢―OM涔嬬被鐨勬満鍒舵潵璁塊棶鏁版嵁騫跺皢鏁版嵁鏁村悎鍒板竷灞涔嬩腑錛岄噰鐢ㄨ繖縐嶆柟娉曪紝鎴戜滑涓嶅啀浣跨敤鍍廥ML榪欐牱鐨勬牸寮忔潵浜や粯Ajax鏇存柊錛岃屾槸閲囩敤涓縐嶆洿涓虹畝鍗曠洿瑙傜殑鏂瑰紡錛岄噰鐢↗avaScript寮曟搸鑷劧鍖歸厤鐨勬牸寮忊斺斾篃灝辨槸JSON銆?/p>
銆銆鏃㈢劧宸茬粡鏄庣‘浜咼SON涓嶺ML鍜孉jax涔嬮棿鐨勫叧緋伙紝涓嬮潰灝嗚繘涓姝ユ帰璁↗SON鑳屽悗鐨勬妧鏈粏鑺傘?/p>
銆銆瀵逛簬JSON錛岄鍏堣鏄庣櫧JSON鍜孹ML涓鏍蜂篃鏄竴縐嶇畝鍗曟枃鏈牸寮忋傜浉瀵逛簬XML錛屽畠鏇村姞鏄撹銆佹洿渚夸簬鑲夌溂媯鏌ャ傚湪璇硶鐨勫眰闈笂錛孞SON涓庡叾浠栨牸寮忕殑鍖哄埆鏄湪浜庡垎闅旀暟鎹殑瀛楃錛孞SON涓殑鍒嗛殧絎﹂檺浜庡崟寮曞彿銆佸皬鎷彿銆佷腑鎷彿銆佸ぇ鎷彿銆佸啋鍙峰拰閫楀彿銆備笅鍥炬槸涓涓狫SON鏈夋晥璐熻澆錛?/p>
銆銆灝嗕笂闈㈢殑JSON鏈夋晥璐熻澆鐢╔ML鏀瑰啓錛屽涓嬶細 銆銆鏄笉鏄緢鐩鎬技錛熶絾瀹冧滑騫朵笉鐩稿悓銆備笅闈㈠皢璇︾粏闃愯堪閲囩敤JSON鍙ユ硶鐨勪紭鐐瑰拰涓嶈凍銆?/p>
銆銆涔嶇湅涓婂幓錛屼嬌鐢↗SON鐨勬暟鎹垎闅旂鐨勪紭鐐瑰彲鑳藉茍涓嶉偅涔堟槑鏄撅紝浣嗗瓨鍦ㄤ竴涓牴鏈х殑緙樼敱錛氬畠浠畝鍖栦簡鏁版嵁璁塊棶銆備嬌鐢ㄨ繖浜涙暟鎹垎闅旂鏃訛紝 JavaScript寮曟搸瀵規暟鎹粨鏋勶紙濡傚瓧絎︿覆銆佹暟緇勩佸璞★級鐨勫唴閮ㄨ〃紺烘伆濂戒笌榪欎簺絎﹀彿鐩稿悓銆?/p>
銆銆榪欏皢寮鍒涗竴鏉℃瘮DOM鎶鏈洿涓轟究鎹風殑鏁版嵁璁塊棶閫斿緞銆備笅闈㈠垪涓懼嚑涓狫avaScript浠g爜鐗囨鏉ヨ鏄庤繖涓榪囩▼錛岃繖浜涗唬鐮佺墖孌典細璁塊棶鍏堝墠鐨凧SON浠g爜鐗囨涓殑淇℃伅錛?/p>
銆銆濡傛灉鎮ㄥ叿澶嘍OM緙栫▼緇忛獙錛屽氨鑳藉緢蹇湴鐪嬪嚭鍖哄埆錛涙柊鎵嬪彲浠ュ弬鐪?Document Object Model 鐨勮繖涓澶栭儴璧勬簮錛岃繖閲屾彁渚涗簡鍏充簬鏁版嵁瀵艱埅鐨勫疄渚嬨?/p>
銆銆JSON鐨勫彟涓涓紭鐐規槸瀹冪殑闈炲啑闀挎с傚湪XML涓紝鎵撳紑鍜屽叧闂爣璁版槸蹇呴渶鐨勶紝榪欐牱鎵嶈兘婊¤凍鏍囪鐨勪緷浠庢э紱鑰屽湪JSON涓紝鎵鏈夎繖浜涜姹傚彧闇閫氳繃涓涓畝鍗曠殑鎷彿鍗沖彲婊¤凍銆傚湪鍖呭惈鏈夋暟浠ョ櫨璁″瓧孌電殑鏁版嵁浜ゆ崲涓紝浼犵粺鐨刋ML鏍囪灝嗕細寤墮暱鏁版嵁浜ゆ崲鏃墮棿銆傜洰鍓嶈繕娌℃湁姝e紡鐨勭爺絀惰〃鏄嶫SON姣擷ML鏈夋洿楂樼殑綰夸笂浼犺緭鏁堢巼錛涗漢浠彧鏄氳繃綆鍗曠殑瀛楄妭鏁版瘮杈冨彂鐜幫紝瀵逛簬絳夋晥鐨凧SON鍜孹ML鏈夋晥璐熻澆錛屽墠鑰呮繪槸灝忎簬鍚庤呫傝嚦浜庡畠浠箣闂寸殑宸窛鏈夊澶э紝鐗瑰埆鏄湪鏂扮殑XML鍘嬬緝鏍煎紡涓嬪畠浠殑宸窛鏈夊澶э紝鏈夊緟榪涗竴姝ョ殑鐮旂┒銆?/p>
銆銆姝ゅ錛孞SON鍙楀埌浜嗘搮闀夸笉鍚岀紪紼嬭璦鐨勫紑鍙戜漢鍛樼殑闈掔潗銆傝繖鏄洜涓烘棤璁哄湪Haskell涓垨 Lisp涓紝榪樻槸鍦ㄦ洿涓轟富嫻佺殑C#鍜孭HP涓紝寮鍙戦兘鍙互鏂逛究鍦扮敓鎴怞SON錛堣瑙?鍙傝冭祫鏂欙級銆?/p>
銆銆鍜岃澶氬ソ涓滆タ閮藉叿鏈変袱闈㈡т竴鏍鳳紝JSON鐨勯潪鍐楅暱鎬т篃涓嶄緥澶栵紝涓烘JSON涓㈠け浜哫ML鍏鋒湁鐨勪竴浜涚壒鎬с傚懡鍚嶇┖闂村厑璁鎬笉鍚屼笂涓嬫枃涓殑鐩稿悓鐨勪俊鎭褰兼娣峰悎錛岀劧鑰岋紝鏄劇劧鍦↗SON涓凡緇忔壘涓嶅埌浜嗗懡鍚嶇┖闂淬侸SON涓嶺ML鐨勫彟涓涓樊鍒槸灞炴х殑宸紓錛岀敱浜嶫SON閲囩敤鍐掑彿璧嬪鹼紝榪欏皢瀵艱嚧褰揦ML杞寲涓篔SON鏃訛紝鍦ㄦ爣璇嗙錛圶ML CDATA錛変笌瀹為檯灞炴у間箣闂村緢闅懼尯鍒嗚皝搴旇琚綋浣滄枃鏈冭檻銆?/p>
銆銆鍙﹀錛孞SON鐗囨鐨勫垱寤哄拰楠岃瘉榪囩▼姣斾竴鑸殑XML紼嶆樉澶嶆潅銆備粠榪欎竴鐐規潵鐪嬶紝XML鍦ㄥ紑鍙戝伐鍏鋒柟闈㈤鍏堜簬JSON銆傚敖綆″姝わ紝涓轟簡娑堥櫎鎮ㄥ榪欎竴棰嗗煙鍙兘瀛樺湪鐨勫洶鎯戯紝涓嬭妭灝嗕粙緇嶄竴浜涙渶涓烘垚鐔熺殑JSON寮鍙戙?/p>
銆銆鏃㈢劧JSON鐨勯瑕佺洰鏍囨槸鏉ヨ嚜嫻忚鍣ㄧ殑淇¢亾澶栬姹傦紝閭d箞鎴戜滑閫夋嫨REST椋庢牸錛圧ESTful錛塛eb鏈嶅姟鏉ョ敓鎴愯繖浜涙暟鎹傞櫎浜嗙敤鍏稿瀷涓氬姟閫昏緫鎺㈢┒Web鏈嶅姟涔嬪錛岃繕灝嗛噰鐢ㄧ壒瀹氱殑API鎶婃湰鍦癑ava緇撴瀯杞寲涓篔SON鏍煎紡錛堣瑙?鍙傝冭祫鏂欙級銆傞鍏堬紝涓嬮潰鐨凧ava浠g爜鐢ㄦ潵鎿嶇旱Address瀵硅薄錛?/p>
銆銆璇ava緇撴瀯鍦ㄥ摢閲岀敓鎴愬茍涓嶉噸瑕侊紙鍙兘鏄湪JSP銆丼ervlet銆丒JB鎴朠OJO涓敓鎴愶級錛岄噸瑕佺殑鏄紝鍦≧EST椋庢牸Web 鏈嶅姟涓湁鏉冧嬌鐢ㄨ繖浜涙暟鎹傚涓嬬ず錛?/p>
銆銆涓轟簡渚夸簬璇存槑錛屾垜浠凡灝嗚繖孌典唬鐮佸皢緗叆JSP錛坮estservice.jsp)涓傚鏋滃畠鐪熸槸涓孌電▼搴忥紝閭d箞綾諱技榪欐牱鐨勪唬鐮佷篃浼氬嚭鐜板湪servlet鎴杊elper綾諱腑銆?REST椋庢牸Web鏈嶅姟棣栧厛鎻愬彇涓や釜閫氳繃URL璇鋒眰浼犻掔粰瀹冪殑杈撳叆鍙傛暟錛屾牴鎹繖浜涘艱繃婊ょ幇鏈夌殑鍦板潃綈夸互閫傚簲璇鋒眰銆傝繃婊よ繃鍦板潃綈垮悗錛屽嵆鍙紑濮嬪驚鐜鏌ava鏄犲皠涓殑姣忎釜鏉$洰銆?/p>
銆銆鎮ㄤ細娉ㄦ剰鍒幫紝鍦ㄥ驚鐜唴閮紝json.org API琚箍娉涚敤浜庡皢鏈湴Java鏍煎紡杞寲涓篔SON瀛楃涓層傝櫧鐒朵粎浣跨敤浜嗗皯閲忕被錛堝嵆JSONArray鍜孞SONObject錛夛紝浣咥PI鎻愪緵鐨勮漿鎹㈡柟娉曠浉褰撳箍娉涳紝鐢氳嚦鑳藉皢XML緇撴瀯杞崲鎴怞SON杈撳嚭銆備絾鍥炲埌鎴戜滑鐨刉eb鏈嶅姟錛屼竴鏃﹀驚鐜亶鍘嗕簡鎵鏈夋潯鐩紝閭d箞鍙橀噺“result”浼氬寘鍚噯澶囪繑鍥炵粰璇鋒眰鏂圭殑鍦板潃綈跨殑JSON鍚岀瓑閮ㄥ垎銆?/p>
銆銆鏃㈢劧宸茬粡鐢熸垚浜咼SON杈撳嚭錛屼笅闈㈡潵鐪嬬湅絳夊紡鐨勫彟涓杈癸細嫻忚鍣ㄥ簲鐢ㄧ▼搴忎腑JSON鏈夋晥璐熻澆鐨勪嬌鐢ㄣ?/p>
銆銆浣滀負鍩轟簬嫻忚鍣ㄧ殑瀹㈡埛绔紝鎴戜滑鐨勮璁′腑澶ч儴鍒嗗伐浣滈兘鏄湪HTML銆丣avaScript鍔犱笂闄勫姞鐨凧avaScript 妗嗘灦涓嬪畬鎴愮殑銆備緥濡傚埄鐢≒rototype搴撹交鏉懼垱寤鴻法嫻忚鍣ㄦ牱寮忕殑Ajax璋冪敤銆備笅闈㈢殑娓呭崟鍖呭惈浜嗘垜浠殑搴旂敤紼嬪簭鐨勭涓閮ㄥ垎錛屼互鍙婄浉搴旂殑JavaScript鍑芥暟銆?/p>
銆銆棣栧厛瀵煎叆浜唒rototype搴擄紝璇ュ簱鐢ㄤ簬淇冭繘瀵筊EST椋庢牸Web鏈嶅姟鐨凙jax璋冪敤銆傛帴涓嬫潵鏄痵earchAddressBook()鍑芥暟錛屽綋鐢ㄦ埛淇敼鍏朵笅鎵紺虹殑HTML閫夋嫨鍒楄〃鏃訛紝灝嗕細瑙﹀彂姝ゅ嚱鏁般傝鍑芥暟琚Е鍙戝悗錛岀敤鎴峰皢浼氳幏寰桯TML閫夋嫨鍒楄〃涓凡閫変腑鐨勯夐」錛屽茍灝嗗叾鏀懼叆涓や釜鐢ㄤ簬榪囨護鍦板潃綈跨殑鍙橀噺涓紝闅忓悗瀹氫箟涓涓寚鍚慠EST椋庢牸鏈嶅姟URL restservice.jsp鐨勯檮鍔犲彉閲忋?/p>
銆銆姝ゆ柟娉曚腑榪樺寘鎷熷姪鍘熷瀷鍑芥暟new Ajax.Request( url, { method: 'get', parameters: pars, onComplete: showResponse }); 鐨勫疄闄匒jax Web鏈嶅姟璋冪敤錛涜〃鏄庝簡瀵圭浉鍏砋RL鐨勪竴涓姹傦紝鍏惰姹傚弬鏁板寘鍚湪pars涓紱鏈鍚庝竴鏃jax璇鋒眰緇堟錛屽嵆鎵цshowResponse()銆?/p>
銆銆涓嬮潰浠howResponse()涓轟緥璇存槑鐢ㄤ簬璇勪及JSON鏈夋晥璐熻澆騫跺皢鍏舵斁鍏TML涓諱綋甯冨眬鐜涓殑鐨勫繀瑕佷唬鐮併?/p>
銆銆姝ゆ柟娉曠殑杈撳叆鍙傛暟鏄疪EST椋庢牸Web鏈嶅姟鍦ㄨ皟鐢ㄦ椂榪斿洖鐨勫搷搴斻傛棦鐒墮鍏堝凡緇忕煡閬撻渶瑕佸鐞咼SON瀛楃涓詫紝閭d箞鍙互鍒╃敤JavaScript eval()鍑芥暟錛屽皢榪欎釜JSON瀛楃涓叉斁鍏ュ唴瀛橈紝騫跺厑璁告暟鎹闂紝姝f槸榪欐牱鐨勭畝渚挎т績浣垮紑鍙戜漢鍛樹嬌鐢↗SON銆傚畬鍏ㄤ笉闇瑕佽繘琛岃В鏋愶紝涓涓畝鍗曠殑eval()鍗沖彲寰楀埌JavaScript緇撴瀯錛屾垜浠彲浠ュ儚鎿嶇旱鍏朵粬浠諱綍JavaScript緇撴瀯涓鏍峰湴鍘繪搷綰靛畠銆?/p>
銆銆涓鏃SON鍝嶅簲緇忚繃eval澶勭悊錛屽皢鍒涘緩涓涓狫avaScript寰幆鏉ユ彁鍙栨瘡涓湴鍧鏉$洰錛屽茍灝嗗悇涓尮閰嶉」鏀懼叆涓涓悕涓篺inalResponse鐨勫鍣ㄥ彉閲忎腑銆傝岃繖涓鍣ㄥ彉閲忔湰韜寘鍚墍鏈夊繀瑕佺殑鏍煎紡錛岀敤浜庡湪欏甸潰甯冨眬涓樉紺烘渶緇堝湴鍧綈褲傚驚鐜粨鏉熸椂錛屽尮閰嶉」涔熼氳繃document.getElementById("addressBookResults").innerHTML鏀劇疆瀹屾瘯銆?/p>
銆銆鏈鍚庯紝涓轟簡淇濇寔瀹屾暣錛岄〉闈㈢殑瀹為檯甯冨眬鐢辮繖浜涗唬鐮佺粍鎴愶細 銆銆涓婇潰鐨勪唬鐮佹竻鍗曚腑鏈鍊煎緱涓鎻愮殑鏄疕TML閫夋嫨鍒楄〃錛屽洜涓轟慨鏀硅Е鍙戝櫒Java紼嬪簭闇瑕佽皟鐢ㄤ俊閬撳Ajax璇鋒眰銆傚叾嬈★紝<div>鍏冪礌灝辨槸鏀劇疆鏍煎紡鍖栧悗鐨凧SON鍝嶅簲鐨勫湴鏂廣?nbsp; 銆銆灝卞儚鍦ㄨ蔣浠惰璁′腑緙栫▼璇█鐨勯夋嫨涓鏍鳳紝JSON鐨勯夋嫨涓庡惁鍙栧喅浜庢偍鑷韓鐨勯渶姹傘傚鏋淲eb services浣跨敤鑰?/em>灝嗗湪浼犵粺銆佸姛鑳藉畬澶囩殑緙栫▼鐜錛堝Java 銆?NET銆丳HP銆丷uby絳夛級涓垱寤猴紝閭d箞瀹屽叏鍙互涓嶄嬌鐢↗SON銆傜粰瀹氬ぇ澶氭暟緙栫▼璇█鐜鐨勬棤闄愬埗鑳藉姏鍙彁渚涘畬鏁寸殑閰嶇疆鎺у埗鏉冿紙鏇翠笉蹇呰瀵瑰畾鍒跺簱銆佸垎鏋愬櫒鎴杊elper綾葷殑璁塊棶錛夛紝閭d箞JSON涓嶺ML鍙婂叾浠朩eb services鏈夋晥杞借嵎涔嬮棿鐨勫樊鍒彲浠ュ拷鐣ヤ笉璁°?/p>
銆銆鍙嶄箣錛屽鏋淲eb services浣跨敤鑰?/em>琚檺鍒跺湪嫻忚鍣ㄧ幆澧冧箣澶栵紝閭d箞JSON鏄煎緱璁ょ湡鑰冭檻鐨勫璞°?鍦ㄦ祻瑙堝櫒涓嬌鐢╓eb services騫墮潪鍏磋叮浣跨劧錛岃屾槸瀹為檯涓氬姟闇姹傘傚鏋滆繖鏃墮渶瑕佷竴涓姞杞芥暟鎹椂涓嶄細鍑虹幇寤惰繜/鍒鋒柊鐨?#8220;婕備寒鐨刉eb 2.0鐣岄潰”錛?灝變笉寰椾笉鍦ㄦ祻瑙堝櫒涓祵鍏jax鍜學eb services鎶鏈?/p>
銆銆鍦ㄨ繖縐嶆儏鍐典笅錛屾偍涓嶄粎鍙楅檺浜庨氳繃緗戠粶璁塊棶澶勭悊鐜錛岃屼笖榪樹細鍙楀埌闅忔満鐢ㄦ埛鐨勯檺鍒訛紝榪嬌緇忛獙涓板瘜鐨勫紑鍙戜漢鍛樼敤鏈鏅亶鐨勫伐鍏峰湪嫻忚鍣ㄤ腑澶勭悊鏂囨湰錛屼緥濡傦細鍓嶈堪鐨凞OM錛屼笌璁塊棶JSON鏍戠浉姣旓紝DOM浣跨敤璧鋒潵闈炲父鍥伴毦銆?/p>
銆銆鎮ㄥ彲涓嬭澆涓庢湰鏂囩浉鍏崇殑浠g爜銆?/p>
銆銆瀹夎涔嬪墠鍏堣В鍘嬩笅杞藉緱鍒扮殑鏂囦歡錛屽皢addressbook.html,prototype-1.4.0.js鍜宺estservice.jsp鏀懼叆浠繪剰紼嬪簭鐨勭洰褰曚笅銆傚皢鍐呭惈鐨刯son.jar澶嶅埗鍒版墍閫夌▼搴忕殑/WEB-INF/lib鐩綍涓嬨傝闂?lt;yourhost>/<yourappdir>/addressbook.html錛屽茍鍦℉TML鍒楄〃涓繘琛岄夋嫨銆備竴鍒囧氨緇紝鍙互榪愯JSON浜嗭紒 銆銆灝界 “Ajax”涓殑“x”浠h〃XML錛學eb services涔熼氳繃鍧氭寔浣跨敤XML鏍煎紡鑰屾垚涓轟富嫻侊紝浣嗚繖騫朵笉鎰忓懗鐫榪欑鏂瑰紡鏃犳噲鍙嚮銆傚湪鏂囨湰澶勭悊鏂歸潰錛孹ML鍦ˋjax紼嬪簭鐨勫簲鐢ㄤ腑宸茬粡鏆撮湶鍑轟竴浜涚己鐐廣傚湪榪欑鎯呭艦涓嬶紝JSON閫愭笎鎴愪負寮曚漢娉ㄧ洰鐨刋ML鏇夸唬鏂規銆?/p>
銆銆閫氳繃瀵笿SON璇硶浼樼己鐐圭殑璁鴻堪錛屼互鍙婂濡備綍浠嶳EST椋庢牸Web services鍒涘緩JSON杈撳嚭銆佸浣曞皢鍏跺祵鍏eb欏甸潰甯冨眬絳夐棶棰樼殑浠嬬粛錛屾偍鐜板湪搴旇鑳藉涓烘渶緇堢敤鎴鋒彁渚涙敮鎸丣SON鐨刉eb services錛屾帴瑙﹀綋鍓嶆彁渚涚殑澶ч噺鍒╃敤榪欎竴鏋佸叿鍓嶉旂殑鏍煎紡鐨刉eb services銆?/p>
JSON鍓栨瀽錛氫紭鐐瑰拰涓嶈凍
{"addressbook": {"name": "Mary Lebow",
"address": {
"street": "5 Main Street"
"city": "San Diego, CA",
"zip": 91912,
},
"phoneNumbers": [
"619 332-3452",
"664 223-4667"
]
}
}
<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>
浼樼偣
涓嶈凍
浠嶹eb services鐢熸垚JSON杈撳嚭
// 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);
// 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
}
JSON鏈夋晥璐熻澆鐨勪嬌鐢?/h3>
<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>
// 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 + ")");
// 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[i].name + "<br/>";
finalResponse += "<i>Address:</i> " + jsonContent.addressbook[i].address.street + " -- " +
jsonContent.addressbook[i].address.city + "," +
jsonContent.addressbook[i].address.zip + ".<br/>";
finalResponse += "<i>Telephone numbers:</i> " + jsonContent.addressbook[i].phoneNumbers[0] + " & " +
jsonContent.addressbook[i].phoneNumbers[1] + ".";
}
// Place formatted finalResponse in div element
document.getElementById("addressBookResults").innerHTML = finalResponse;
}
<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" onchange="searchAddressBook()">
<option>A</option>
...
<option>Z</option>
</select>
</td><td valign="top">To:<br/>
<select id="toLetter" size="15" onchange="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>
JSON閫傚悎鎮ㄥ悧
紺轟緥浠g爜
緇撴潫璇?/h3>
鍙傝冭祫鏂?/h3>
浣滆呯畝浠?/span>
Daniel Rubio 鏄竴鍚嶈蔣浠墮【闂紝鍏鋒湁鍗佷綑騫寸殑浼佷笟杞歡寮鍙戠粡楠屻傝繎鏈燂紝浠栧垱鍔炰簡Mashup Soft鍏徃錛屽紑濮嬩笓鏀諱負Mashup浣跨敤Web services鐨勬湁鍏蟲柟闈€?/td>
]]>
JSON(JavaScript Object Notation) 鏄竴縐嶈交閲忕駭鐨勬暟鎹氦鎹㈡牸寮忋傛槗浜庝漢闃呰鍜岀紪鍐欍傚悓鏃朵篃鏄撲簬鏈哄櫒瑙f瀽鍜岀敓鎴愩傚畠鍩轟簬JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999鐨勪竴涓瓙闆嗐?JSON閲囩敤瀹屽叏鐙珛浜庤璦鐨勬枃鏈牸寮忥紝浣嗘槸涔熶嬌鐢ㄤ簡綾諱技浜嶤璇█瀹舵棌鐨勪範鎯紙鍖呮嫭C, C++, C#, Java, JavaScript, Perl, Python絳夛級銆傝繖浜涚壒鎬т嬌JSON鎴愪負鐞嗘兂鐨勬暟鎹氦鎹㈣璦銆?/p>
JSON寤烘瀯浜庝袱縐嶇粨鏋勶細
榪欎簺閮芥槸甯歌鐨勬暟鎹粨鏋勩備簨瀹炰笂澶ч儴鍒嗙幇浠h綆楁満璇█閮戒互鏌愮褰㈠紡鏀寔瀹冧滑銆傝繖浣垮緱涓縐嶆暟鎹牸寮忓湪鍚屾牱鍩轟簬榪欎簺緇撴瀯鐨勭紪紼嬭璦涔嬮棿浜ゆ崲鎴愪負鍙兘銆?/p>
JSON鍏鋒湁浠ヤ笅榪欎簺褰㈠紡錛?/p>
瀵硅薄鏄竴涓棤搴忕殑“‘鍚嶇О/鍊?#8217;瀵?#8221;闆嗗悎銆備竴涓璞′互“{”錛堝乏鎷彿錛夊紑濮嬶紝“}”錛堝彸鎷彿錛夌粨鏉熴傛瘡涓?#8220;鍚嶇О”鍚庤窡涓涓?#8220;:”錛堝啋鍙鳳級錛?#8220;‘鍚嶇О/鍊?#8217; 瀵?#8221;涔嬮棿浣跨敤“,”錛堥楀彿錛夊垎闅斻?
鏁扮粍鏄鹼紙value錛夌殑鏈夊簭闆嗗悎銆備竴涓暟緇勪互“[”錛堝乏涓嫭鍙鳳級寮濮嬶紝“]”錛堝彸涓嫭鍙鳳級緇撴潫銆傚間箣闂翠嬌鐢?#8220;,”錛堥楀彿錛夊垎闅斻?
鍊鹼紙value錛夊彲浠ユ槸鍙屽紩鍙鋒嫭璧鋒潵鐨勫瓧絎︿覆錛?em>string錛夈佹暟鍊?number)銆?code>true銆?code>false銆?null
銆佸璞★紙object錛夋垨鑰呮暟緇勶紙array錛夈傝繖浜涚粨鏋勫彲浠ュ祵濂椼?
瀛楃涓詫紙string錛夋槸鐢卞弻寮曞彿鍖呭洿鐨勪換鎰忔暟閲廢nicode瀛楃鐨勯泦鍚堬紝浣跨敤鍙嶆枩綰胯漿涔夈備竴涓瓧絎︼紙character錛夊嵆涓涓崟鐙殑瀛楃涓詫紙character string錛夈?
瀛楃涓詫紙string錛変笌C鎴栬匤ava鐨勫瓧絎︿覆闈炲父鐩鎬技銆?
鏁板鹼紙number錛変篃涓嶤鎴栬匤ava鐨勬暟鍊奸潪甯哥浉浼箋傞櫎鍘繪湭鏇句嬌鐢ㄧ殑鍏繘鍒朵笌鍗佸叚榪涘埗鏍煎紡銆傞櫎鍘諱竴浜涚紪鐮佺粏鑺傘?/p>
絀虹櫧鍙互鍔犲叆鍒頒換浣曠鍙蜂箣闂淬?浠ヤ笅鎻忚堪浜嗗畬鏁寸殑璇█銆?/p>
Why JSON isn't just for JavaScript • I can't believe it's not XML! • The JSON vs XML debate begins in earnest • JSON and XML • Why JSON vs XML is a yawn • JSON vs. XML as a data interchange format • Examining JSON • JSON and .Net • An Introduction to JSON • Shaping the future of secure Ajax mashups • JSON and Browser Security