探究官方 JSON 與阿里的 FastJSON 中 put 方法
本文由碼農網 – 冠軍原創,轉載請看清文末的轉載要求,歡迎參與我們的付費投稿計劃!
首先看兩段程式碼
//======================第一段============================= import org.json.JSONObject; public class JSONTest { public static void main(String[] args) { JSONObject json = new JSONObject(); json.put("key", "123"); System.out.println("#1:"+json.toString()); System.out.println("#2:"+ new JSONObject().put("key", "123").toString() ); } } //============================第二段======================= import com.alibaba.fastjson.JSONObject; public class JSONTest { public static void main(String[] args) { JSONObject json = new JSONObject(); json.put("key", "123"); System.out.println("#1:"+json.toString()); System.out.println("#2:"+ new JSONObject().put("key", "123").toString() ); } } //===================================================
很明顯的看出這兩部分只是引入的jar不同而已。那麼執行起來效果能不能一樣呢?
答案肯定是不同的。
首先json.org給出的jar包能夠正常執行出你想要的結果,但是fastjson就會給你一些驚喜(自己試一下吧)。
為什麼會有這種不同呢?
一看原始碼便知。
首先json.org實現:
public JSONObject put(String key, Object value) throws JSONException { if (key == null) { throw new NullPointerException("Null key."); } if (value != null) { testValidity(value); this.map.put(key, value); } else { this.remove(key); } return this; }
這裡的put函式會將當前例項返回(return this).所以#2處的連續操作始終是當前例項出來的JSONObject的操作,是沒有問題的。
再看fastjson中put實現方法:
public Object put(String key, Object value) { return map.put(key, value); }
這裡返回了map的put方法返回值,下面給出map的put方法實現:
/** * Associates the specified value with the specified key in this map. * If the map previously contained a mapping for the key, the old * value is replaced. * * @param key key with which the specified value is to be associated * @param value value to be associated with the specified key * @return the previous value associated with <tt>key</tt>, or * <tt>null</tt> if there was no mapping for <tt>key</tt>. * (A <tt>null</tt> return can also indicate that the map * previously associated <tt>null</tt> with <tt>key</tt>.) */ public V put(K key, V value) { if (key == null) return putForNullKey(value); int hash = hash(key); int i = indexFor(hash, table.length); for (Entry<K,V> e = table[i]; e != null; e = e.next) { Object k; if (e.hash == hash && ((k = e.key) == key || key.equals(k))) { V oldValue = e.value; e.value = value; e.recordAccess(this); return oldValue; } }
當傳入的key已經存在時,將返回key對應已有的value,如果key不存在,就會返回null,註釋裡面說的非常清楚。
所以fastjson中的put會依據map中已有的key值來返回不同的值,所以#2中的toString是對key對應的值的操作,但是如果之前key在json中不存在就會變成對null的操作。
一點學習經歷,不足之處,請多指正。
本文連結:http://www.codeceo.com/article/json-org-vs-fastjson-put.html
本文作者:碼農網 – 冠軍
[ 原創作品,轉載必須在正文中標註並保留原文連結和作者等資訊。]
相關文章
- 生成JSON資料--fastjson(阿里)方法JSONAST阿里
- fastJson在java後臺轉換json格式資料探究ASTJSONJava
- JSON 之FastJson解析JSONAST
- 記錄下最近開發中fastjson的坑-fastjson出現json解析異常ASTJSON
- 生成JSON資料--官方方法JSON
- JSON資料解析:Gson(谷歌)和fastjson(阿里巴巴)的異同點JSON谷歌AST阿里
- fastjson字串轉JSON的$ref問題ASTJSON字串
- JSON 之FastJson遠端解析JSONAST
- Hashtable中put進去的物件是否保持put的順序物件
- JSON學習--com.alibaba.fastjson.JSONJSONAST
- fastjson 返回json字串,JSON.parse 報錯ASTJSON字串
- FastJson--阿里巴巴公司開源的速度最快的Json和物件轉換工具ASTJSON阿里物件
- IDBObjectStore.put() 方法Object
- Android 中的Json解析工具fastjson 、序列化、反序列化AndroidJSONAST
- put與putIfAbsent區別
- fastJson和jackson轉json的區別ASTJSON
- fastjson: json物件,json物件陣列,javabean物件,json字串之間的相互轉化ASTJSON物件陣列JavaBean字串
- fastjson:物件轉化成json出現$refASTJSON物件
- java中json的使用方法JavaJSON
- 【FastJSON】解決FastJson中“$ref 迴圈引用”的問題ASTJSON
- Android 使用fastjson找不到fastjson包問題的解決方法AndroidASTJSON
- 在java專案中的mongodb的_id被fastjson轉為json時竟然丟失了JavaMongoDBASTJSON
- 利用PUT方式上傳檔案的方法研究
- 【JSON】Python與Flask中涉及到的JSONJSONPythonFlask
- Fastjson的基本使用方法大全ASTJSON
- js中this指向的問題與聯絡深入探究JS
- JSON解析器之Gson、FastJson、JacksonJSONAST
- Java中使用Fastjson將JSON檔案轉物件JavaASTJSON物件
- js中的JSON介紹與案例JSON
- FastJson中迴圈引用的問題ASTJSON
- FastJSON解析Json字串(反序列化為List、Map)ASTJSON字串
- fastjson判斷JSON字串是Object還是List<Object>ASTJSON字串Object
- Android總結之json解析(FastJson Gson 對比)AndroidJSONAST
- [Nodejs]json與string轉化的方法NodeJSJSON
- Sanic head(), options(), patch(), put() 方法/函式函式
- LinkedBlockingQueue中put原始碼分析BloC原始碼
- fastjson @JSONField與SerializerFeatureASTJSON
- 【JavaSE】Map集合,HashMap的常用方法put、get的原始碼解析JavaHashMap原始碼