CRUD崽怎麼了?java
精通CRUD還怕找不到工做嘛?json
giao,最近跟其餘項目對接總是要用json,什麼解析json字符串,什麼對象轉json格式字符串,聽着阿夜我真是頭禿。微信
提及Java操做json,第一個映入我眼眶的不是阿里爸爸的fastjson,而是json-lib。接觸這個是去年剛進公司時從前輩遺留的代碼中看到的(失誤失誤前輩健在,只是頭髮快沒了,提及這個話我不禁得摸了摸頭皮)。maven
當時以爲真好用吶,它的maven配置是這樣的:ide
<dependency> <groupId>net.sf.json-lib</groupId> <artifactId>json-lib</artifactId> <version>2.4</version> <classifier>jdk15</classifier> </dependency>
操做數據是這樣的:post
public static void main(String[] args) { String jsonStr = "{\"id\":1,\"name\":\"eknown\"}"; // json字符串轉json對象 JSONObject obj = JSONObject.fromObject(jsonStr); // 操做json對象 System.out.println(obj.get("id")); obj.element("roleList", "[1,2,3]"); // json對象轉json字符串 System.out.println(obj.toString()); }
可是今天查閱資料的時候發現有文章提到json-lib有這樣一個問題:在json字符串數據較大時,因爲json-lib會對當前解析位置到字符串末尾進行substring操做,在JDK1.7以上的環境中,會進行大量的字符串複製操做,致使大量的CPU和內存消耗,嚴重的甚至會Full GC。jsonp
嚇得夜仔我當場差點休克——我負責的三個已上線的項目,都使用了json-lib來解析字符串,甚至,在某個接口中,進行了很是多的json解析操做。ヽ(*。>Д<)o゜this
之後仍是改用更快更省內存的json庫吧,好比fastjson,聽這名字就很快吶!code
Giao,可是fastjson前陣子不是爆出一堆嚴重漏洞嘛?xml
原諒夜仔我久居深山老林、每日CRUD,不問外間事。
幸虧幸虧,那幫猿已經緊急修復了漏洞了,只要將版本升級到1.2.60及以上就能夠啦!
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.60</version> </dependency>
這裏給出一個簡單的示例,畢竟夜我這帥都是天天枸杞泡茶保養的效果啦,不能熬夜哦。
package jsonparse; import com.alibaba.fastjson.JSONObject; /** * @author zhangfanghao * @version 1.0 * @date 2019-12-17 20:04 */ public class FastJsonParseDemo { public static void main(String[] args) { String jsonStr = "{\"id\":1,\"name\":\"eknown\"}"; // json字符串轉json對象 JSONObject obj = JSONObject.parseObject(jsonStr); // 操做json對象 System.out.println(obj.get("id")); obj.put("roleList", "[1,2,3]"); // json對象轉json字符串 System.out.println(obj.toString()); // json對象轉Java對象 User user = obj.toJavaObject(User.class); System.out.println(user); } } class User { private Integer id; private String name; private Object roleList; @Override public String toString() { return "User{" + "id=" + id + ", name='" + name + '\'' + ", roleList=" + roleList + '}'; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Object getRoleList() { return roleList; } public void setRoleList(Object roleList) { this.roleList = roleList; } }
推薦閱讀Java3y的這篇文章:https://juejin.im/post/5df2ecdaf265da33c7550328,裏面講得很好啦。
其實還有不少也很好用的json庫呀,好比谷歌的Gson,又或者JSON In Java。
惋惜,這些妖豔貨暫時還不入不了夜的眼,等我有空再關門研究一下😎
如對文章有任何疑問,請聯繫我——我的微信:guanlanju6688