干掉 fastjson!國產新一代 fastjson 2!

      網友投稿 921 2025-04-03

      點擊下方“Java編程鴨”關注并標星


      更多精彩 第一時間直達

      1. FASTJSON 2.0介紹

      FASTJSON 2.0是FASTJSON項目的重要升級,目標是為下一個十年提供一個高性能的JSON庫,同一套API支持JSON/JSONB兩種協(xié)議,JSONPath是一等公民,支持全量解析和部分解析,支持Java服務端、客戶端Android、大數(shù)據場景。

      FASJTONS2代碼 https://github.com/alibaba/fastjson2/releases/tag/2.0.1

      JSONB格式文檔 https://github.com/alibaba/fastjson2/wiki/jsonb_format_cn

      FASTJSON 2性能有了很大提升,具體性能數(shù)據看這里:

      https://github.com/alibaba/fastjson2/wiki/fastjson_benchmark

      2. 使用前準備

      2.1 Maven依賴

      在fastjson 2.0中,groupId和1.x不一樣,是com.alibaba.fastjson2

      com.alibaba.fastjson2

      fastjson2

      2.0.1

      如果原來使用fastjson 1.2.x版本,可以使用兼容包,兼容包不能保證100%兼容,請仔細測試驗證,發(fā)現(xiàn)問題請及時反饋。

      com.alibaba

      fastjson

      2.0.1

      2.2 常用類和方法

      在fastjson 2.0中,package和1.x不一樣,是com.alibaba.fastjson2。如果你之前用的是fastjson1,大多數(shù)情況直接更包名就即可。

      package?com.alibaba.fastjson2;

      class?JSON?{

      //?將字符串解析成JSONObject

      static?JSONObject?parseObject(String?str);

      //?將字符串解析成JSONArray

      干掉 fastjson!國產新一代 fastjson 2!

      static?JSONArray?parseArray(String?str);

      //?將字符串解析成Java對象

      static?T?parseObject(byte[]?utf8Bytes,?Class?objectClass);

      //?將Java對象輸出成字符串

      static?String?toJSONString(Object?object);

      //?將Java對象輸出成UT8編碼的byte[]

      static?byte[]?toJSONBytes(Object?object);

      }

      class?JSONB?{

      //?將jsonb格式的byte[]解析成Java對象

      static?T?parseObject(byte[]?jsonbBytes,?Class?objectClass);

      //?將Java對象輸出成jsonb格式的byte[]

      static?byte[]?toBytes(Object?object);

      }

      class?JSONObject?{

      Object?get(String?key);

      int?getIntValue(String?key);

      Integer?getInteger(String?key);

      long?getLongValue(String?key);

      Long?getLong(String?key);

      T?getObject(String?key,?Class?objectClass);

      //?將JSONObject對象轉換為Java對象

      T?toJavaObject(Class?objectClass);

      }

      class?JSONArray?{

      Object?get(int?index);

      int?getIntValue(int?index);

      Integer?getInteger(int?index);

      long?getLongValue(int?index);

      Long?getLong(int?index);

      T?getObject(int?index,?Class?objectClass);

      }

      class?JSONPath?{

      //?構造JSONPath

      static?JSONPath?of(String?path);

      //?根據path直接解析輸入,會部分解析優(yōu)化,不會全部解析

      Object?extract(JSONReader?jsonReader);

      //?根據path對對象求值

      Object?eval(Object?rootObject);

      }

      class?JSONReader?{

      //?構造基于String輸入的JSONReader

      static?JSONReader?of(String?str);

      //?構造基于ut8編碼byte數(shù)組輸入的JSONReader

      static?JSONReader?of(byte[]?utf8Bytes);

      //?構造基于char[]輸入的JSONReader

      static?JSONReader?of(char[]?chars);

      //?構造基于json格式byte數(shù)組輸入的JSONReader

      static?JSONReader?ofJSONB(byte[]?jsonbBytes)

      }

      3. 讀取JSON對象

      String?str?=?"{\"id\":123}";

      JSONObject?jsonObject?=?JSON.parseObject(str);

      int?id?=?jsonObject.getIntValue("id");

      String?str?=?"[\"id\",?123]";

      JSONArray?jsonArray?=?JSON.parseArray(str);

      String?name?=?jsonArray.getString(0);

      int?id?=?jsonArray.getIntValue(1);

      4. 將JavaBean對象生成JSON

      4.1 將JavaBean對象生成JSON格式的字符串

      class?Product?{

      public?int?id;

      public?String?name;

      }

      Product?product?=?new?Product();

      product.id?=?1001;

      product.name?=?"DataWorks";

      JSON.toJSONString(product);

      //?生成如下的結果

      {

      "id"?:?1001,

      "name"?:?"DataWorks"

      }

      JSON.toJSONString(product,?JSONWriter.Feature.BeanToArray);

      //?生成如下的結果

      [123,?"DataWorks"]

      4.2 將JavaBean對象生成UTF8編碼的byte[]

      Product?product?=?...;

      byte[]?utf8JSONBytes?=?JSON.toJSONBytes(product);

      4.3 將JavaBean對象生成JSONB格式的byte[]

      Product?product?=?...;

      byte[]?jsonbBytes?=?JSONB.toBytes(product);

      byte[]?jsonbBytes?=?JSONB.toBytes(product,?JSONWriter.Feature.BeanToArray);

      5. 讀取JavaBean

      5.1 將字符串讀取成JavaBean

      String?str?=?"{\"id\":123}";

      Product?product?=?JSON.parseObject(str,?Product.class);

      5.2 將UTF8編碼的byte[]讀取成JavaBean

      byte[]?utf8Bytes?=?"{\"id\":123}".getBytes(StandardCharsets.UTF_8);

      Product?product?=?JSON.parseObject(utf8Bytes,?Product.class);

      5.3 將JSONB數(shù)據讀取成JavaBean

      byte[]?jsonbBytes?=?...

      Product?product?=?JSONB.parseObject(jsonbBytes,?Product.class);

      Product?product?=?JSONB.parseObject(jsonbBytes,?Product.class,?JSONReader.Feature.SupportBeanArrayMapping);

      6. 使用JSONPath

      6.1 使用JSONPath部分讀取數(shù)據

      String?str?=?...;

      JSONPath?path?=?JSONPath.of("$.id");?//?緩存起來重復使用能提升性能

      JSONReader?parser?=?JSONReader.of(str);

      Object?result?=?path.extract(parser);

      6.2 使用JSONPath讀取部分utf8Bytes的數(shù)據

      byte[]?utf8Bytes?=?...;

      JSONPath?path?=?JSONPath.of("$.id");?//?緩存起來重復使用能提升性能

      JSONReader?parser?=?JSONReader.of(utf8Bytes);

      Object?result?=?path.extract(parser);

      6.3 使用JSONPath讀取部分jsonbBytes的數(shù)據

      byte[]?jsonbBytes?=?...;

      JSONPath?path?=?JSONPath.of("$.id");?//?緩存起來重復使用能提升性能

      JSONReader?parser?=?JSONReader.ofJSONB(jsonbBytes);?//?注意,這是利用ofJSONB方法

      Object?result?=?path.extract(parser);

      來源:github.com/alibaba/fastjson2/releases

      END

      看完本文有收獲?請轉發(fā)分享給更多人

      關注「Java編程鴨」,提升Java技能

      關注Java編程鴨微信公眾號,后臺回復:碼農大禮包?可以獲取最新整理的技術資料一份。涵蓋Java?框架學習、架構師學習等!

      文章有幫助的話,在看,轉發(fā)吧。

      謝謝支持喲 (*^__^*)

      Java JSON

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:wps怎么實現(xiàn)共享(wps怎么開共享)
      下一篇:求助,透視表的建立我建立的看著像個啥我也好說求大神幫忙。(透視表怎么運用)
      相關文章
      亚洲成a人无码亚洲成av无码| 亚洲综合av一区二区三区不卡| 亚洲成av人在线观看网站| 亚洲一区二区三区四区视频| 亚洲色大成网站www永久| 亚洲Av无码专区国产乱码DVD| 亚洲精品无码久久久久sm| 亚洲中文字幕在线观看| 亚洲中文字幕在线观看| 亚洲精品亚洲人成人网| 国产亚洲精品a在线无码| 不卡精品国产_亚洲人成在线| 亚洲午夜国产片在线观看| 亚洲精品WWW久久久久久| 亚洲无线一二三四区手机| 久久久久亚洲AV无码专区网站| 亚洲精品国产自在久久| 红杏亚洲影院一区二区三区| 亚洲日韩激情无码一区| 亚洲av中文无码乱人伦在线咪咕| 亚洲VA中文字幕无码毛片| 亚洲男人的天堂在线播放| 亚洲视频在线观看免费视频| 亚洲国产美女精品久久| va天堂va亚洲va影视中文字幕| 中文字幕乱码亚洲无线三区| 国产精品亚洲一区二区在线观看| 国产成人精品日本亚洲语音| 亚洲人成电影网站国产精品| 国产AV无码专区亚洲AV手机麻豆| 精品亚洲永久免费精品| 亚洲一区中文字幕久久| 亚洲一级高清在线中文字幕| 亚洲午夜无码久久久久软件| 日韩欧美亚洲中文乱码| 久久青青草原亚洲av无码| 亚洲va久久久噜噜噜久久天堂| 久久精品a亚洲国产v高清不卡| 亚洲人成影院午夜网站| 亚洲国产精品嫩草影院| 亚洲熟妇少妇任你躁在线观看无码|