最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Jackson 使用以及性能介紹

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

直接上代碼,看下最簡單也是最常用的方法,將Object 轉為 JSON 以及將Json轉為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);
    
    //將對象轉為JSON串
    String jsonString = objectMapper.writeValueAsString(params);
    System.out.println(jsonString);
    System.out.println("--------------------分割線-----------------------------");
    
    //將JSON串 轉為 Object 對象
    Map resultMap = objectMapper.readValue(jsonString, HashMap.class);
    resultMap.entrySet().stream().forEach(entry ->{
      System.out.println(entry);
    });
  }
}

如果你只是忘了怎么操作,或者只是想知道怎么對象和JSON串如何相互轉,那么你看到這就足夠了,如果你想了解更多關于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,核心包,提供基于"流模式"解析的相關 API,它包括 JsonPaser 和 JsonGenerator。 Jackson 內(nèi)部實現(xiàn)正是通過高性能的流模式 API 的 JsonGenerator 和 JsonParser 來生成和解析 json。
  • jackson-annotations,注解包,提供標準注解功能;
  • jackson-databind ,數(shù)據(jù)綁定包, 提供基于"對象綁定" 解析的相關 API ( ObjectMapper ) 和"樹模型" 解析的相關 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 項目工程中。在添加相關依賴包之后,就可以使用 Jackson。 

信息配置

在調(diào)用 writeValue 或調(diào)用 readValue 方法之前,往往需要設置 ObjectMapper 的相關配置信息。這些配置信息應用 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 用于屬性,把屬性的名稱序列化時轉換為另外一個名稱。示例: 
@JsonProperty("birth_ d ate") 
private Date birthDate;
@JsonFormat 用于屬性或者方法,把屬性的格式序列化時轉換成指定的格式。示例: 
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm") 
public Date getBirthDate()
@JsonPropertyOrder 用于類, 指定屬性在序列化時 json 中的順序 , 示例: 
@JsonPropertyOrder({ "birth_Date", "name" }) 
public class Person
@JsonCreator 用于構造方法,和 @JsonProperty 配合使用,適用有參數(shù)的構造方法。 示例: 
@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();
    //將對象轉為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...
}

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

那么性能如何呢?

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

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

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

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

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

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

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

相關文章

  • JAVA構造器是否為靜態(tài)方法你知道嗎

    JAVA構造器是否為靜態(tài)方法你知道嗎

    這篇文章主要為大家詳細介紹了JAVA構造器是否為靜態(tài)方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • Java中Future接口詳解

    Java中Future接口詳解

    這篇文章主要介紹了Java中Future接口詳解,本文通過案例給大家詳細講解了Java中Future接口,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • 解決Spring中@Value注解取值為null問題

    解決Spring中@Value注解取值為null問題

    近期應用中因業(yè)務迭代需要接入 user 客戶端,接入后總是啟動失敗,報注冊 user bean 依賴的配置屬性為 null,所以接下來小編就和大家一起排查分析這個問題,感興趣的小伙伴跟著小編一起來看看吧
    2023-08-08
  • java eclipse 出現(xiàn) xxx cannot be resolved to a type 錯誤解決方法

    java eclipse 出現(xiàn) xxx cannot be resolved to a type 錯誤解決方法

    這篇文章主要介紹了java eclipse 出現(xiàn) xxx cannot be resolved to a type 錯誤解決方法的相關資料,需要的朋友可以參考下
    2017-03-03
  • SpringBoot接口防抖(防重復提交)的實現(xiàn)方案

    SpringBoot接口防抖(防重復提交)的實現(xiàn)方案

    所謂防抖,一是防用戶手抖,二是防網(wǎng)絡抖動,在Web系統(tǒng)中,表單提交是一個非常常見的功能,如果不加控制,容易因為用戶的誤操作或網(wǎng)絡延遲導致同一請求被發(fā)送多次,所以本文給大家介紹了SpringBoot接口防抖(防重復提交)的實現(xiàn)方案,需要的朋友可以參考下
    2024-04-04
  • idea手動導入了包但編譯運行還是報找不到xxx.jar包的解決方案

    idea手動導入了包但編譯運行還是報找不到xxx.jar包的解決方案

    這篇文章主要介紹了idea手動導入了包但編譯運行還是報找不到xxx.jar包的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • 使用spring-data-redis中的Redis事務

    使用spring-data-redis中的Redis事務

    這篇文章主要介紹了使用spring-data-redis中的Redis事務,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • SpringBoot自定義注解實現(xiàn)Token校驗的方法

    SpringBoot自定義注解實現(xiàn)Token校驗的方法

    這篇文章主要介紹了SpringBoot自定義注解實現(xiàn)Token校驗的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • SpringBoot集成ffmpeg實現(xiàn)視頻轉碼播放示例詳解

    SpringBoot集成ffmpeg實現(xiàn)視頻轉碼播放示例詳解

    這篇文章主要為大家介紹了SpringBoot集成ffmpeg實現(xiàn)視頻轉碼播放示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • Java實現(xiàn)模擬鍵盤鼠標操作工具

    Java實現(xiàn)模擬鍵盤鼠標操作工具

    在桌面自動化、軟件測試、游戲開發(fā)以及遠程控制等領域中,模擬鍵盤和鼠標操作是一項非常實用的技術,本文將使用?Java?實現(xiàn)一個模擬鍵盤與鼠標操作的工具,希望對大家有所幫助
    2025-03-03

最新評論

台湾省| 临沂市| 东乌珠穆沁旗| 金沙县| 青神县| 深州市| 天气| 阳高县| 萝北县| 磐安县| 克山县| 抚松县| 迁西县| 黔西县| 诸城市| 饶河县| 石阡县| 绍兴县| 水城县| 汨罗市| 永和县| 许昌市| 通河县| 井研县| 巴彦淖尔市| 金乡县| 柘荣县| 大足县| 神木县| 万全县| 文成县| 华容县| 贵溪市| 安乡县| 中江县| 德江县| 温宿县| 都匀市| 曲麻莱县| 井冈山市| 华容县|