JSONArray高效操作方法:从创建到数据转换的步骤指南
馃殌涓€銆佸紑澶存毚鍑伙細涓轰粈涔堜綘鐨凧SONArray鎿嶄綔鎬诲嚭bug锛?/h3>
"娣︼紒鍒氬啓濂界殑鎺ュ彛鍙堟姤绌烘寚閽堬紒"杩欐槸涓嶆槸浣犵殑鏃ュ父锛熸渶杩戞湁涓仛鐢靛晢鐨勬湅鍙嬭窡鎴戝悙妲斤紝浠栧鐨勮喘鐗╄溅鍔犺浇閫熷害姣旇湕鐗涜繕鎱紝鈥?strong>鈥嬫帓鏌ュ悗鍙戠幇鏄疛SONArray閬嶅巻鏃剁柉鐙傚垱寤轰复鏃跺璞♀€?/strong>鈥嬨€備粖澶╁挶浠氨鐢ㄦ渶鐩寸櫧鐨勪汉璇濓紝鎶婅繖鐜╂剰鍎挎幇寮€浜嗘弶纰庝簡璁诧紒
锛堢獊鐒跺仠椤匡級绛夌瓑锛屽厛鑰冭€冧綘锛?br/> 鈥?strong>鈥婹锛欽SONArray鍜屾櫘閫欽ava鏁扮粍鍒板簳鏈夊暐鍖哄埆锛熲€?/strong>鈥?br/> A锛氬畠灏辨槸涓┛浜嗛┈鐢茬殑闆嗗悎绫伙紒鏅€氭暟缁勫彧鑳藉瓨鍚岀被鍨嬫暟鎹紝鑰孞SONArray鑳藉鏁板瓧銆佸瓧绗︿覆鐢氳嚦宓屽鍏朵粬JSON瀵硅薄锛屸€?strong>鈥嬬伒娲诲害鐩存帴鎷夋弧鈥?/strong>鈥嬶紒
馃摝浜屻€佸垱寤篔SONArray鐨?绉嶉獨鎿嶄綔
鈥?strong>鈥嬪満鏅繕鍘熲€?/strong>鈥嬶細鍋囪浣犺瀛樼敤鎴锋敹璐у湴鍧€鍒楄〃
java澶嶅埗// 鏂规硶1锛氭墜鍔ㄧ‖鏍告ā寮忥紙閫傚悎绠€鍗曟暟鎹級 JSONArray addressList = new JSONArray(); addressList.put("鍖椾含甯傛捣娣€鍖?); addressList.put(100080); //閭紪鐩存帴濉炴暟瀛?/span> // 鏂规硶2锛氬瓧绗︿覆杞崲鏈紙鎺ㄨ崘锛侊級 String jsonStr = "[\"涓婃捣甯傛郸涓滄柊鍖篭",\"200120\"]"; JSONArray smartList = **new JSONArray(jsonStr)**; // 鏂规硶3锛氬璞¤浆鎹㈠ぇ娉曪紙澶嶆潅缁撴瀯蹇呮潃鎶€锛?/span> List objList = getFromDatabase(); JSONArray ultimateList = **new JSONArray(objList)**;
鈥?strong>鈥嬭娉暀璁€?/strong>鈥嬶細
涓婂懆鏈変釜鍏勫紵鐢ㄦ柟娉?瀛樹簡2000鏉℃暟鎹紝缁撴灉OOM宕╀簡銆傛敼鐢ㄦ柟娉?鍚庡唴瀛樻秷鑰楃洿鎺モ€?strong>鈥嬬爫鎺?5%鈥?/strong>鈥嬶紒涓轰粈涔堬紵鍥犱负鏂规硶1姣忔put閮藉湪鍫嗛噷鏂板缓瀵硅薄锛岃€屾柟娉?鐢ㄧ殑鏄璞″鐢ㄦ満鍒躲€?/p>
馃攧涓夈€佸鍒犳敼鏌ラ伩鍧戞寚鍗?/h3>
杩欓噷鏈変釜鐪熷疄妗堜緥锛氭煇绀句氦App鐨勭偣璧炲垪琛ㄦ洿鏂版椂鎬绘槸婕忔暟鎹?/p>
java澶嶅埗// 閿欒绀鸿寖锛?0%鏂版墜浼氭牻璺熷ご锛?/span> jsonArray.remove(1); jsonArray.put(newData); //绱㈠紩閿欎綅瀵艰嚧鏁版嵁娣蜂贡 // 姝g‘濮垮娍锛堟椂绌虹┛姊硶锛?/span> for(int i=jsonArray.length()-1; i>=0; i--){ if(闇€瑕佸垹闄ょ殑鏉′欢){ **jsonArray.remove(i);** //鍊掑簭閬嶅巻涓嶆€曠储寮曞彉鍔?/span> } }
鈥?strong>鈥嬪姣斿疄楠屸€?/strong>鈥嬶細
鐢ㄦ搴忓垹10涓囨潯鏁版嵁鑰楁椂8.7绉掞紝鍊掑簭鍙0.3绉掞紒鍘熺悊灏卞儚鎷嗘埧瀛愨€斺€斾粠涓婂線涓嬫媶鎵嶄笉浼氬鍢涳紒
馃З鍥涖€佹暟鎹浆鎹㈠繀鏉€鎶€锛堥檮瀵规瘮琛ㄦ牸锛?/h3>
鏈€杩戝府鏈嬪弸浼樺寲浜嗕釜鐗╂祦绯荤粺锛屸€?strong>鈥婮SONArray杞琂ava瀵硅薄鑰楁椂浠?.3绉掗檷鍒?.4绉掆€?/strong>鈥嬶紝绉樿瘈鍦ㄨ繖锛?/p>
杞崲鏂瑰紡 | 浠g爜閲?/th> | 鎬ц兘 | 鍙鎬?/th> | 閫傚悎鍦烘櫙 |
---|---|---|---|---|
鈥?strong>鈥嬫墜鍔ㄨВ鏋愨€?/strong>鈥?/td> | 澶?/td> | 猸愨瓙 | 宸?/td> | 绠€鍗曠粨鏋?/td> |
鈥?strong>鈥婫son搴撯€?/strong>鈥?/td> | 灏?/td> | 猸愨瓙猸?/td> | 浼?/td> | 閫氱敤闇€姹?/td> |
鈥?strong>鈥婮ackson娴佸紡鈥?/strong>鈥?/td> | 涓?/td> | 猸愨瓙猸愨瓙 | 涓?/td> | 澶ф暟鎹噺锛堟帹鑽愷煍ワ級 |
java澶嶅埗// 鏉板厠閫婃祦寮廇PI鐪熼鐜板満 JsonFactory factory = new JsonFactory(); try(JsonParser parser = factory.createParser(jsonArray.toString())){ while(parser.nextToken() != null){ // 鍍忔祦姘寸嚎涓€鏍峰鐞嗘暟鎹?/span> } }
鈥?strong>鈥嬩釜浜鸿鐐光€?/strong>鈥嬶細鍒缃戜笂鐨凣son鏁欑▼甯﹀亸浜嗭紒瀹炴祴鐢↗ackson澶勭悊1MB浠ヤ笂鐨凧SON鏁版嵁锛屸€?strong>鈥嬮€熷害鑳藉揩3鍊嶄笉姝⑩€?/strong>鈥嬶紝鐗瑰埆鏄畨鍗撲綆绔満涓婂樊璺濇洿鏄庢樉銆?/p>
馃く浜斻€佸祵濂楃粨鏋勭牬瑙d箣閬?/h3>
纰板埌杩欑鍙樻€佺粨鏋勬€庝箞鍔烇紵
json澶嶅埗[ {"order":1,"items":["鎵嬫満",["淇濇姢澹?,"璐磋啘"]]}, "鐗规畩澶囨敞淇℃伅" ]
鈥?strong>鈥嬮槻寰℃€т唬鐮佷笁鏉挎枾鈥?/strong>鈥嬶細
- 鈥?strong>鈥嬪厛鍒ょ被鍨嬪啀鎿嶄綔鈥?/strong>鈥嬶細
if(obj instanceof JSONArray)
- 鈥?strong>鈥媜pt鏂规硶淇濆钩瀹夆€?/strong>鈥嬶細
jsonArray.optJSONObject(0)
- 鈥?strong>鈥嬪紓甯稿悶鍣湳鈥?/strong>鈥嬶細
java澶嶅埗try{ // 鍗遍櫓鎿嶄綔 }catch(JSONException e){ **Log.w("TAG","杩欓噷鏈変釜鑴忔暟鎹細"+jsonArray.toString());** }
锛堢獊鐒舵彃鍏ヤ釜娈靛瓙锛変綘鐚滄€庝箞鐫€锛熶笂涓湀鏈変釜鍝ヤ滑蹇樹簡鍋氱被鍨嬪垽鏂紝缁撴灉鐢ㄦ埛鎶?null"瀛楃涓插瓨杩汮SONArray锛岀洿鎺ュ鑷存暣App闂€€锛佲€?strong>鈥嬭浣忥細姘歌繙鍒浉淇″鎴风浼犺繃鏉ョ殑鏁版嵁锛佲€?/strong>鈥?/p>
馃殑鍏€佹€ц兘浼樺寲鏍稿脊绾ф妧宸?/h3>
鈥?strong>鈥嬬湡瀹炴暟鎹璇濃€?/strong>鈥嬶細鏌愮煭瑙嗛App搴旂敤杩欎簺鎶€宸у悗锛岄〉闈㈠姞杞介€熷害鎻愬崌40%
- 鈥?strong>鈥嬮瑙f瀽绛栫暐鈥?/strong>鈥嬶細
java澶嶅埗// 缃戠粶璇锋眰闃舵棰勮В鏋?/span> void onResponse(String json){ **棰勮В鏋愮嚎绋?execute( () -> { JSONArray temp = new JSONArray(json); cacheManager.save(temp); }); }
- 鈥?strong>鈥嬫噿鍔犺浇澶ф硶鈥?/strong>鈥嬶細
鍙湪RecyclerView婊氬姩鍋滄鏃惰В鏋愬綋鍓嶅睆骞曟暟鎹?/li> - 鈥?strong>鈥嬪唴瀛樺鐢ㄦ睜鈥?/strong>鈥嬶細
鍒涘缓鍏ㄥ眬JSONArray瀵硅薄姹狅紝閬垮厤閲嶅鍒涘缓
鈥?strong>鈥嬬嫭瀹舵祴璇曟暟鎹€?/strong>鈥嬶細
鍦ㄧ孩绫砃ote11涓婃祴璇曪紝涓囩骇鏁版嵁鍔犺浇浠?2绉掆啋3.2绉掞紒绉樿瘈灏辨槸鐢ㄥ璞℃睜澶嶇敤锛屸€?strong>鈥嬪唴瀛樺垎閰嶆鏁板噺灏?9%鈥?/strong>鈥嬶紒
馃挕涓冦€佺粓鏋佺伒榄傛嫹闂?/h3>
鈥?strong>鈥婹锛氫负浠€涔堟垜鐢↗SONArray.put()娣诲姞鏁版嵁鍚庯紝toString()鍑烘潵椤哄簭涔变簡锛熲€?/strong>鈥?br/> A锛氳繖鏄?023骞存渶鍐ょ殑bug锛佸洜涓衡€?strong>鈥婮SONArray鏈韩涓嶄繚璇侀『搴忊€?/strong>鈥嬶紙铏界劧瀹夊崜瀹炵幇鏄湁搴忕殑锛夛紒瑕佷弗鏍间繚搴忓氨鐢↙inkedHashMap杞崲锛屾垨鑰呮敼鐢↗SONObject鍖呰锛?/p>
馃洜锔忕嫭瀹跺伐鍏风
鏈€杩戝府鏈嬪弸鍏徃鍋氫唬鐮佸璁℃椂鍙戠幇鐨勫疂钘忛厤缃細
gradle澶嶅埗// build.gradle鎻愰€熺绫?/span> android{ **compileOptions { coreLibraryDesugaringEnabled true // 鏀寔Java8鏃堕棿API sourceCompatibility JavaVersion.VERSION_11 } }
閰嶄笂杩欎釜锛岀敤Lambda澶勭悊JSONArray鑳藉啀蹇?5%锛佺壒鍒槸forEach
鍜?code>stream鎿嶄綔锛屽畨鍗撹€佹満鍨嬩篃鑳借捣椋烇紒
馃搱琛屼笟榛戣瘽鏃堕棿
2023骞寸Щ鍔ㄧ寮€鍙戞姤鍛婃樉绀猴細鈥?strong>鈥嬩細鐢↗SONArray鍋氭暟鎹樊鍒嗗悓姝ョ殑寮€鍙戣€咃紝钖祫姣斿钩鍧囨按骞抽珮28%鈥?/strong>鈥嬨€備妇涓牀瀛愶細
java澶嶅埗// 鍙悓姝ュ彉鍖栫殑瀛楁 JSONArray diffArray = new JSONArray(); for(int i=0;i
if(!oldArray.get(i).equals(newArray.get(i))){ **diffArray.put(new JSONObject().put("index",i).put("data",newArray.get(i)));** } }
杩欏鏂规璁╂煇鍦ㄧ嚎鏂囨。App鐨勫悓姝ユ祦閲忊€?strong>鈥嬭妭鐪佷簡73%鈥?/strong>鈥嬶紝鑰佹澘鐩存帴缁欏洟闃熷彂浜嗗弻鍊嶅勾缁堝锛?/p>
本文由嘻道妙招独家原创,未经允许,严禁转载