亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解Jackson 使用以及性能介紹

 更新時間:2021年01月11日 14:10:49   作者:妖四靈.Shuen  
這篇文章主要介紹了詳解Jackson 使用以及性能介紹,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

直接上代碼,看下最簡單也是最常用的方法,將Object 轉(zhuǎn)為 JSON 以及將Json轉(zhuǎn)為Object方式

public class TestJackson {
  public static void main(String[] args) throws IOException {
    ObjectMapper objectMapper = new ObjectMapper();
    Map<String,Object> params = new HashMap<>();
    params.put("name","jack");
    params.put("age",18);
    
    //將對象轉(zhuǎn)為JSON串
    String jsonString = objectMapper.writeValueAsString(params);
    System.out.println(jsonString);
    System.out.println("--------------------分割線-----------------------------");
    
    //將JSON串 轉(zhuǎn)為 Object 對象
    Map resultMap = objectMapper.readValue(jsonString, HashMap.class);
    resultMap.entrySet().stream().forEach(entry ->{
      System.out.println(entry);
    });
  }
}

如果你只是忘了怎么操作,或者只是想知道怎么對象和JSON串如何相互轉(zhuǎn),那么你看到這就足夠了,如果你想了解更多關(guān)于Jackson,以及Jackson與fastJson等的對比,那么可以往下看。

介紹 

Jackson 是當前用的比較廣泛的,用來序列化和反序列化 json 的 Java 的開源框架。Jackson 社 區(qū)相對比較活躍,更新速度也比較快, 從 Github 中的統(tǒng)計來看,Jackson 是最流行的 json 解析器之一 。 Spring MVC 的默認 json 解析器便是 Jackson。 Jackson 優(yōu)點很多。 Jackson 所依賴的 jar 包較少 ,簡單易用。與其他 Java 的 json 的框架 Gson 等相比, Jackson 解析大的 json 文件速度比較快;Jackson 運行時占用內(nèi)存比較低,性能比較好;Jackson 有靈活的 API,可以很容易進行擴展和定制。

Jackson 的 1.x 版本的包名是 org.codehaus.jackson ,當升級到 2.x 版本時,包名變?yōu)?com.fasterxml.jackson,本文討論的內(nèi)容是基于最新的 Jackson 的 2.9.1 版本。

組件

  • jackson-core,核心包,提供基于"流模式"解析的相關(guān) API,它包括 JsonPaser 和 JsonGenerator。 Jackson 內(nèi)部實現(xiàn)正是通過高性能的流模式 API 的 JsonGenerator 和 JsonParser 來生成和解析 json。
  • jackson-annotations,注解包,提供標準注解功能;
  • jackson-databind ,數(shù)據(jù)綁定包, 提供基于"對象綁定" 解析的相關(guān) API ( ObjectMapper ) 和"樹模型" 解析的相關(guān) API (JsonNode);基于"對象綁定" 解析的 API 和"樹模型"解析的 API 依賴基于"流模式"解析的 API。

pom依賴 

<dependency> 
  <groupId>com.fasterxml.jackson.core</groupId> 
  <artifactId>jackson-databind</artifactId> 
  <version>2.9.5</version>
</dependency>

jackson-databind 依賴 jackson-core 和 jackson-annotations,當添加 jackson-databind 之后, jackson-core 和 jackson-annotations 也隨之添加到 Java 項目工程中。在添加相關(guān)依賴包之后,就可以使用 Jackson。 

信息配置

在調(diào)用 writeValue 或調(diào)用 readValue 方法之前,往往需要設置 ObjectMapper 的相關(guān)配置信息。這些配置信息應用 java 對象的所有屬性上

    //在反序列化時忽略在 json 中存在但 Java 對象不存在的屬性
    objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,
        false);
    //在序列化時日期格式默認為 yyyy-MM-dd'T'HH:mm:ss.SSSZ
    objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);
    //在序列化時忽略值為 null 的屬性
    objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
    //忽略值為默認值的屬性
    objectMapper.setDefaultPropertyInclusion(JsonInclude.Include.NON_DEFAULT);

更多配置信息可以查看 Jackson 的 DeserializationFeature,SerializationFeature 和 I nclude。 

注解使用

Jack還提供了注解方式的使用

注解 用法
@JsonProperty 用于屬性,把屬性的名稱序列化時轉(zhuǎn)換為另外一個名稱。示例: 
@JsonProperty("birth_ d ate") 
private Date birthDate;
@JsonFormat 用于屬性或者方法,把屬性的格式序列化時轉(zhuǎn)換成指定的格式。示例: 
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm") 
public Date getBirthDate()
@JsonPropertyOrder 用于類, 指定屬性在序列化時 json 中的順序 , 示例: 
@JsonPropertyOrder({ "birth_Date", "name" }) 
public class Person
@JsonCreator 用于構(gòu)造方法,和 @JsonProperty 配合使用,適用有參數(shù)的構(gòu)造方法。 示例: 
@JsonCreator 
public Person(@JsonProperty("name")String name) {…}
@JsonAnySetter 用于屬性或者方法,設置未反序列化的屬性名和值作為鍵值存儲到 map 中 
@JsonAnySetter 
public void set(String key, Object value) { 
map.put(key, value); 
}
@JsonAnyGetter 用于方法 ,獲取所有未序列化的屬性 
public Map<String, Object> any() { return map; }

public class TestJackson {
  public static void main(String[] args) throws IOException {
    ObjectMapper objectMapper = new ObjectMapper();
    //將對象轉(zhuǎn)為JSON串
    String jsonString = objectMapper.writeValueAsString(new User());
    System.out.println(jsonString);
  }
}
 
class User {
  @JsonProperty("name")
  private String aaa = "hello";
 
  @JsonProperty("date")
  @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
  private Date bbb = new Date();
  ...省略setter 和 getter...
}

讀取對象轉(zhuǎn)換 還可以從 Reader ,File,URL,以及InputStream,字節(jié)數(shù)組中等 中獲取對象數(shù)據(jù),喜歡的可以自己研究下

那么性能如何呢?

對比對象選擇應用最廣泛的Jackson和Google出品的Gson。測試環(huán)境選擇JDK 8,AMD 3700X,3200MHZ內(nèi)存。簡化實驗,只測試簡單對象和復雜對象的String轉(zhuǎn)對象、對象轉(zhuǎn)String,調(diào)用1千萬次的對比結(jié)果如下(時間單位是毫秒):

從測試結(jié)果看,F(xiàn)astJson確實是最快的,但僅比Jackson快20%左右,Google的Gson是最慢的,差距較大。讀到這里,是不是覺得選擇FastJson肯定沒錯??!但其實,F(xiàn)astJson在國際上并不是很流行,反而Jackson很流行,難道其他人傻?當然不是,因為Fastjson這兩年頻頻被曝出高危漏洞,這也是早已埋下的伏筆,因為FastJson為了追求快,舍棄了很多方面,比如失去了元貝應該兼容的java特性,對json標準遵循也不嚴格,總體來說,fastjson是一個代碼質(zhì)量較差的國產(chǎn)類庫,當然它也在不斷的提升改變,也希望它繼續(xù)堅持。

如果面試官問為什么選擇FastJson?因為快!這一個理由就可以把他頂回去了。

這里的調(diào)查研究并不是很充分,沒有對內(nèi)存占用、大文檔的測試。

在現(xiàn)代應用程序中,即使最慢的Gson,也是滿足需求的;解析文檔速度的快慢,并不能作為選型的唯一標準,可能連主要標準都算不上。對IO優(yōu)化,并行處理等優(yōu)化措施,比選用一個更快的庫更有效。

所以整體上來說Jackson 綜合評價應該是很不錯的。

到此這篇關(guān)于詳解Jackson 使用以及性能介紹的文章就介紹到這了,更多相關(guān)Jackson 使用及性能內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java基礎教程之八大基本數(shù)據(jù)類型

    Java基礎教程之八大基本數(shù)據(jù)類型

    這篇文章主要給大家介紹了關(guān)于Java基礎教程之八大基本數(shù)據(jù)類型的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-06-06
  • java中l(wèi)ambda表達式語法說明

    java中l(wèi)ambda表達式語法說明

    “Lambda 表達式”(lambda expression)是一個匿名函數(shù),Lambda表達式基于數(shù)學中的λ演算得名,直接對應于其中的lambda抽象(lambda abstraction),是一個匿名函數(shù),即沒有函數(shù)名的函數(shù)。Lambda表達式可以表示閉包(注意和數(shù)學傳統(tǒng)意義上的不同)。
    2016-09-09
  • SpringBoot+WebSocket向前端推送消息的實現(xiàn)示例

    SpringBoot+WebSocket向前端推送消息的實現(xiàn)示例

    WebSocket是一種在單個TCP連接上進行全雙工通信的協(xié)議,允許服務器主動向客戶端推送信息,同時也能從客戶端接收信息,本文主要介紹了SpringBoot+WebSocket向前端推送消息的實現(xiàn)示例,感興趣的可以了解一下
    2024-08-08
  • Spring Cloud Alibaba和Dubbo融合實現(xiàn)

    Spring Cloud Alibaba和Dubbo融合實現(xiàn)

    這篇文章主要介紹了Spring Cloud Alibaba和Dubbo融合實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-04-04
  • Feign 集成 Hystrix實現(xiàn)不同的調(diào)用接口不同的設置方式

    Feign 集成 Hystrix實現(xiàn)不同的調(diào)用接口不同的設置方式

    這篇文章主要介紹了Feign 集成 Hystrix實現(xiàn)不同的調(diào)用接口不同的設置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java日常練習題,每天進步一點點(55)

    Java日常練習題,每天進步一點點(55)

    下面小編就為大家?guī)硪黄狫ava基礎的幾道練習題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-08-08
  • SpringBoot項目在IntelliJ IDEA中如何實現(xiàn)熱部署

    SpringBoot項目在IntelliJ IDEA中如何實現(xiàn)熱部署

    spring-boot-devtools是一個為開發(fā)者服務的一個模塊,其中最重要的功能就是自動應用代碼更改到最新的App上面去。,這篇文章主要介紹了SpringBoot項目在IntelliJ IDEA中如何實現(xiàn)熱部署,感興趣的小伙伴們可以參考一下
    2018-07-07
  • 使用Java操作TensorFlow的方法

    使用Java操作TensorFlow的方法

    TensorFlow是一個功能強大且廣泛使用的框架,它不斷得到改進,并最近被引入新語言包括Java和JavaScript,這篇文章主要介紹了如何使用Java操作TensorFlow,需要的朋友可以參考下
    2023-05-05
  • 深度解析Java中CountDownLatch的原理

    深度解析Java中CountDownLatch的原理

    在高并發(fā)編程中,AbstractQueuedSynchronizer(簡稱AQS)抽象的隊列同步器是我們必須掌握的,本文將通過CountDownLatch底層實現(xiàn)原理來了解AQS共享鎖模式的實現(xiàn)原理,快跟隨小編一起學習學習吧
    2023-07-07
  • SpringBoot定制三種錯誤頁面及錯誤數(shù)據(jù)方法示例

    SpringBoot定制三種錯誤頁面及錯誤數(shù)據(jù)方法示例

    Spring Boot提供的默認異常處理機制通常并不一定適合我們實際的業(yè)務場景,因此,我們通常會根據(jù)自身的需要對Spring Boot全局異常進行統(tǒng)一定制,例如定制錯誤頁面,定制錯誤數(shù)據(jù)等。本文主要介紹了SpringBoot三種自定義錯誤頁面的實現(xiàn),快來學習吧
    2021-12-12

最新評論