<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Fastjson 2 來了,性能繼續(xù)提升,還能再戰(zhàn)十年

          共 4585字,需瀏覽 10分鐘

           ·

          2022-04-24 13:07

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

          • FASJTONS2代碼 https://github.com/alibaba/fastjson2/releases/tag/2.0.1
          • JSONB格式文檔 https://github.com/alibaba/fastjson2/wiki/jsonb_format_cn
          • FASTJSON 2性能有了很大提升,具體性能數(shù)據(jù)看這里 https://github.com/alibaba/fastjson2/wiki/fastjson_benchmark

          2. 使用前準(zhǔn)備

          2.1 Maven依賴

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

          <dependency>
          ?<groupId>com.alibaba.fastjson2groupId>
          ?<artifactId>fastjson2artifactId>
          ?<version>2.0.1version>
          dependency>

          https://repo1.maven.org/maven2/com/alibaba/fastjson2/fastjson2/

          2.2

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

          <dependency>
          ?<groupId>com.alibabagroupId>
          ?<artifactId>fastjsonartifactId>
          ?<version>2.0.1version>
          dependency>

          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
          ????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對象轉(zhuǎn)換為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?{
          ????//?構(gòu)造JSONPath
          ????static?JSONPath?of(String?path);

          ????//?根據(jù)path直接解析輸入,會部分解析優(yōu)化,不會全部解析
          ????Object?extract(JSONReader?jsonReader);
          ????
          ????//?根據(jù)path對對象求值
          ????Object?eval(Object?rootObject);
          }

          class?JSONReader?{
          ????//?構(gòu)造基于String輸入的JSONReader
          ????static?JSONReader?of(String?str);
          ????
          ????//?構(gòu)造基于ut8編碼byte數(shù)組輸入的JSONReader
          ????static?JSONReader?of(byte[]?utf8Bytes);
          ????
          ????//?構(gòu)造基于char[]輸入的JSONReader
          ????static?JSONReader?of(char[]?chars);
          ????
          ????//?構(gòu)造基于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);

          //?生成如下的結(jié)果
          {
          ?"id"?:?1001,
          ?"name"?:?"DataWorks"
          }

          JSON.toJSONString(product,?JSONWriter.Feature.BeanToArray);
          //?生成如下的結(jié)果
          [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ù)據(jù)讀取成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ù)據(jù)

          String?str?=?...;

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

          JSONReader?parser?=?JSONReader.of(str);
          Object?result?=?path.extract(parser);

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

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

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

          JSONReader?parser?=?JSONReader.of(utf8Bytes);
          Object?result?=?path.extract(parser);

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

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

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

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

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

          ------

          推薦閱讀:

          世界的真實(shí)格局分析,地球人類社會底層運(yùn)行原理

          不是你需要中臺,而是一名合格的架構(gòu)師(附各大廠中臺建設(shè)PPT)

          億級(無限級)并發(fā),沒那么難

          論數(shù)字化轉(zhuǎn)型——轉(zhuǎn)什么,如何轉(zhuǎn)?

          華為干部與人才發(fā)展手冊(附PPT)

          企業(yè)10大管理流程圖,數(shù)字化轉(zhuǎn)型從業(yè)者必備!

          【中臺實(shí)踐】華為大數(shù)據(jù)中臺架構(gòu)分享.pdf

          華為的數(shù)字化轉(zhuǎn)型方法論

          華為如何實(shí)施數(shù)字化轉(zhuǎn)型(附PPT)

          超詳細(xì)280頁Docker實(shí)戰(zhàn)文檔!開放下載

          華為大數(shù)據(jù)解決方案(PPT)

          瀏覽 48
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  大香蕉伊在 | 色狠狠色狠狠综合天天 | 全免费一级毛片免费看无码播放 | 黑人大鷄巴A片视频 | 伊人操逼逼 |