Java涓璊SON瑙f瀽鍣ㄧ殑涓€鐐硅瑙
鏈枃鍦板潃锛?a href="http://blog.****.net/chaijunkun/article/details/7208828">http://blog.****.net/chaijunkun/article/details/7208828锛岃浆杞借娉ㄦ槑鍑哄銆傛湰鍗氬浼氫笉瀹氭湡瀵逛互鍓嶇殑鏂囩珷鍐呭杩涜琛ュ厖鍜岃鏄庯紝寮虹儓寤鸿鐩存帴鐪嬪崥鏂囧師鍑哄銆?/p>
聽
聽
聽
鏈€杩戝湪鐮旂┒JSON锛孞ava涓湁寰堝澶勭悊JSON鐨勭被搴擄紝lib-json銆乻f-json銆乫astjson杩樻湁Jackson Json銆傜涓€涓氨涓嶈浜嗭紝鎬ц兘鍜屽姛鑳介兘娌℃湁浠€涔堜寒鐐广€?/p>
聽
聽
聽
sf-json鏈€澶х殑浼樼偣灏辨槸闅忔満璇诲彇鏂逛究銆備唬鐮佸緢绠€鍗曪細
聽
JSONObject json= JSONObject.fromObject(str);
聽
鐒跺悗璇诲彇瀛楁鍐呭:
聽
json.getString鎴栬€単etInt涔嬬被鐨勩€備絾鏄伐浣滄晥鐜囨湁寰呭晢姒凤紝鑰屼笖瀹规槗鍑洪敊銆?/p>
聽
鍙﹀sf-json杩樻湁涓紭鐐瑰氨鏄嚜鍔ㄤ娇鐢╱nicode缂栫爜锛屽綋鍐呭涓嚭鐜颁腑鏂囨垨鑰呯鍙风殑鏃跺€欎細鑷姩灏嗗叾杞崲涓篭uFFFF杩欐牱鐨剈nicode缂栫爜銆傝繖鏍峰嵆渚挎槸鍦╳eb鏈嶅姟鍣ㄧ鐨剅esponse涓病鏈夎缃紪鐮侊紝鐩存帴鎺ㄩ€乯son涔熶笉浼氬嚭鐜颁贡鐮侀棶棰樸€?/p>
聽
聽
聽
fastjson锛岄【鍚嶆€濅箟灏辨槸蹇€傜綉涓婂凡缁忔湁寰堝鎬ц兘瀵规瘮鐨勬暟鎹簡锛屾垜灏变笉澶氳鍏舵€ц兘浜嗐€?/p>
聽
杩欓噷瑕佽鐨勫氨鏄畠鐨勫姛鑳芥€ч棶棰樸€傚彲鑳芥槸瀹氫綅涓嶄竴鏍凤紝鏈€鍒漟astjson灏辨槸瑕佸揩锛屽洜姝ゅ湪瀵硅薄鐨勫簭鍒楀寲涓庡弽搴忓垪鍖栦笂涓嬩簡寰堝ぇ鍔熷か銆備絾鏄湪鍔熻兘涓婃湁鎵€缂轰箯銆?/p>
聽
涓嶇煡鍦ㄥ摢涓増鏈紑濮嬪姞涓婁簡key鎸夊瓧鍏告帓搴忕殑鍔熻兘銆備絾鏄矊浼艰繖涓姛鑳芥病鏈夊姙娉曞叧闂€傛湁浜涙椂鍊欐垜鏄笉甯屾湜瀛楁椤哄簭琚墦涔辩殑锛岃繖涓棶棰樺氨鏃犳硶瑙e喅銆?/p>
聽
鎴戜娇鐢ㄧ殑fastjson鐗堟湰涓?.1.14銆傚彟澶杅astjson杩樻湁涓€浜沚ug娌℃湁瑙e喅锛岃€屼笖鏄瘮杈冩槑鏄剧殑bug銆備緥濡傚湪@JsonField 娉ㄨВ涓璮ormat鍙傛暟锛岃繖涓槸鐢ㄦ潵鎸囧畾Date绫诲瀷鏁版嵁濡備綍搴忓垪鍖栫殑銆傚鏋滀綘浣跨敤鑻辨枃鎴栫鍙凤紝OK锛屾病鏈夐棶棰橈紙渚嬪yyyy-MM-dd锛夛紝浣嗘槸鏍煎紡涓?涓€鏃﹀嚭鐜颁腑鏂囧氨浼氬嚭閿欙紙渚嬪yyyy骞碝M鏈坉d鏃ワ級銆傝€屼笖缁忚繃瀹為獙锛屾墍鏈夌殑娉ㄨВ閮借鏀惧湪灞炴€х殑Getter锛堝氨鏄痝etXXX()鏂规硶锛変笂锛岀洿鎺ユ斁鍦ㄥ睘 鎬т笂鏄棤娉曞伐浣滅殑銆傚湪eclipse涓紝涓€鑸垜浠兘鏄洿鎺ュ啓灞炴€э紝灞炴€у啓瀹屽悗鐢ㄨ嚜鍔ㄧ敓鎴愮殑鏂瑰紡鐢熸垚Getter鍜孲etter鏂规硶銆傚鏋滀粖鍚庤绫荤殑灞炴€у彂 鐢熷彉鍖栦簡锛屼釜浜烘洿鍊惧悜浜庣洿鎺ュ垹闄ゆ墍鏈塆etter鍜孲etter锛岀劧鍚庨噸鏂扮敓鎴愩€傞偅涔堝亣濡傛妸娉ㄨВ鍏ㄦ斁鍒癎etter涓婇潰锛屾垜鍒犵殑鏃跺€欏氨瑕侀潪甯稿皬蹇冦€?/p>
聽
鍐嶆湁涓€涓瘮杈冭嚧鍛界殑灏辨槸鏂囨。銆傚嚑涔庢壘涓嶅埌鍏ㄩ潰鐨勬枃妗f潵浠嬬粛鎴栨敮鎸乫astjson銆傛暣涓」鐩兘鐢变竴涓悕涓衡€滄俯灏戔€濈殑浜烘潵璐熻矗锛屽瓨鍦ㄥ緢澶氫笉纭畾鐨勫洜绱犮€?/p>
聽
聽
聽
缁忚繃涓汉鐨勮瘎浼帮紝鎴戞洿鍊惧悜浜庝娇鐢↗ackson Json銆傞鍏堣鏂囨。锛孞ackson Json瀹樻柟缃戠珯涓婂姣忎竴涓増鏈兘鏈夎灏界殑鏂囨。锛?a href="http://jackson.codehaus.org/">http://jackson.codehaus.org/锛夈€?鍙﹀Jackson Json鐨勫簭鍒楀寲涓庡弽搴忓垪鍖栭€熷害涔熷苟涓嶈寰楁湁澶氭參銆傛洿閲嶈鐨勬槸瀹冪殑娉ㄨВ鏀寔瑕佸ソ浜巉astjson銆傚氨鎷垮垰鎵嶈鍒扮殑key鎸夊瓧鍏告帓搴忕殑鍔熻兘鍚э紝鍙互鍦ㄥ疄浣?绫讳笂鐩存帴鍔犱笂@JsonPropertyOrder(alphabetic=false)娉ㄨВ灏卞彲浠ュ叧闂帓搴忓姛鑳姐€傝€屽浜庡叾浠栧姛鑳界殑娉ㄨВ鏀寔涔熷緢濂姐€?/p>
聽
渚嬪Date鐨勫簭鍒椾笌鍙嶅簭鍒楀寲娉ㄨВ鏀寔
聽
@JsonSerialize(using=DateSerializer.class)
@JsonDeserialize(using=DateDeserializer.class)
private Date birthday;
聽
杩欐牱灏辫兘鎸囧畾瀵筨irthday瀛楁鐨勫簭鍒楀寲涓庡弽搴忓垪鍖栨柟娉曘€傚彟澶栵紝杩欎袱涓敞瑙i兘鐩存帴鏀惧湪浜嗗睘鎬т笂锛屾病鏈夋斁鍦℅etter涓娿€?/p>
聽
閽堝涓婇潰鐨勪袱涓敞瑙o紝鎴戠殑搴忓垪鍖栧櫒鏄繖鏍峰啓鐨?/p>
聽
public class DateSerializer extends JsonSerializer<Date>
聽
缁ф壙浜咼sonSerializer锛屾硾鍨嬩腑鎸囧畾浜嗗簭鍒楀寲绫诲瀷涓篋ate锛岀劧鍚庨噸鍐欏涓嬫柟娉?/p>
聽
@Override
public void serialize(Date date, JsonGenerator gen, SerializerProvider provider)聽throws IOException, JsonProcessingException
聽
鏂规硶涓紶杩涙潵鐨刣ate灏辨槸灏嗚琚簭鍒楀寲鐨勬暟鎹紝鎺ヤ笅鏉ヤ綘鍙互浠绘剰灞曠ず璇ユ暟鎹紝鍦ㄩ€€鍑鸿鏂规硶涔嬪墠浣跨敤gen.writeString(formattedDate);鏉ュ畬鎴愬簭鍒楀寲灏卞彲浠ヤ簡銆?/p>
聽
绫讳技鍦帮紝鎴戠殑鍙嶅簭鍒楀寲鍣ㄦ槸杩欐牱鍐欑殑锛?/p>
聽
public class DateDeserializer extends JsonDeserializer<Date>
聽
缁ф壙浜咼sonDeserializer锛屾硾鍨嬩腑鎸囧畾浜嗗弽搴忓垪鍖栫被鍨嬩负Date锛岀劧鍚庨噸鍐欏涓嬫柟娉?/p>
聽
@Override
public Date deserialize(JsonParser parser, DeserializationContext context)throws IOException, JsonProcessingException {
聽
杩欓噷闈㈡柟娉曠殑杩斿洖鍊煎氨鏄弽搴忓垪鍖栧悗鐨勬渶缁堝唴瀹广€傛柟娉曞唴閮ㄤ綘鍙互浣跨敤parser.getText()鏉ヨ幏鍙栧埌褰撳墠瑕佸鐞嗙殑鍐呭銆備綘鍙互闅忎究鎶樿吘閲岄潰鐨勬暟鎹紝鍙渶瑕佹渶鍚庤繑鍥炰綘鎯宠鐨凞ate灏卞彲浠ヤ簡銆?/p>
聽
聽
聽
聽
聽
鍙﹀鍦ㄥ埗浣滃熀浜嶫ackson Json鐨凷ervice鏃舵兂浣跨敤娉涘瀷鐨勬€濇兂鏉ュ啓涓€涓帴鍙o紝鏈€缁堢洰鐨勫氨鏄笇鏈涙柟娉曡兘闅忕潃鍙傛暟绫诲瀷涓嶅悓锛岃繑鍥炲€肩殑绫诲瀷涔熼殢涔嬩笉鍚屻€備互鍓嶅緢灏戝啓娉涘瀷鐨勬柟娉曪紝杩?涓棶棰樿櫧鐒跺熀纭€锛屼絾鏄毦浣忎簡鎴戯紝缁忚繃鏌ョ湅Jackson Json鐨勬簮浠g爜锛屾垜寰楀埌浜嗗惎绀猴紝鍍忎笅闈㈣繖鏍峰啓灏監K浜嗭細
聽
public <T> T strToObj(String jsonStr, Class<T> clazz)
聽
杩欐牱鍐欏氨鍙互浜嗐€傚亣璁炬垜鏈変竴涓猂esult绫诲瀷鐨勫璞¢渶瑕佸弽搴忓垪鍖栵紝褰撳墠宸茬粡鏈変簡涓€涓猨son瀛楃涓瞛sonStr锛岄偅涔堟垜鍙渶瑕佹寚瀹氱浜屼釜鍙傛暟clazz灏卞彲浠ョ洿鎺ュ緱鍒癛esult绫诲瀷鐨勫璞′簡锛?/p>
聽
Result newResult= jsonProcessService.strToObj(jsonStr, Result.class);
聽
杩欐牱灏变笉鐢ㄥ湪鏂规硶鍓嶅姞鍏?Result)绫诲瀷寮哄埗杞崲浜嗐€?/p>
聽
聽
聽
聽
聽
聽
涓婇潰鍙槸鎴戠殑涓€浜涙嫏瑙侊紝杩樿鍚屼粊浠澶氭寚鏁欍€?/p>