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

詳解Jackson 使用以及性能介紹

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

直接上代碼,看下最簡單也是最常用的方法,將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 是當(dāng)前用的比較廣泛的,用來序列化和反序列化 json 的 Java 的開源框架。Jackson 社 區(qū)相對比較活躍,更新速度也比較快, 從 Github 中的統(tǒng)計(jì)來看,Jackson 是最流行的 json 解析器之一 。 Spring MVC 的默認(rèn) json 解析器便是 Jackson。 Jackson 優(yōu)點(diǎn)很多。 Jackson 所依賴的 jar 包較少 ,簡單易用。與其他 Java 的 json 的框架 Gson 等相比, Jackson 解析大的 json 文件速度比較快;Jackson 運(yùn)行時(shí)占用內(nèi)存比較低,性能比較好;Jackson 有靈活的 API,可以很容易進(jìn)行擴(kuò)展和定制。

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

組件

  • jackson-core,核心包,提供基于"流模式"解析的相關(guān) API,它包括 JsonPaser 和 JsonGenerator。 Jackson 內(nèi)部實(shí)現(xiàn)正是通過高性能的流模式 API 的 JsonGenerator 和 JsonParser 來生成和解析 json。
  • jackson-annotations,注解包,提供標(biāo)準(zhǔn)注解功能;
  • 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,當(dāng)添加 jackson-databind 之后, jackson-core 和 jackson-annotations 也隨之添加到 Java 項(xiàng)目工程中。在添加相關(guān)依賴包之后,就可以使用 Jackson。 

信息配置

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

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

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

注解使用

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

注解 用法
@JsonProperty 用于屬性,把屬性的名稱序列化時(shí)轉(zhuǎn)換為另外一個(gè)名稱。示例: 
@JsonProperty("birth_ d ate") 
private Date birthDate;
@JsonFormat 用于屬性或者方法,把屬性的格式序列化時(shí)轉(zhuǎn)換成指定的格式。示例: 
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm") 
public Date getBirthDate()
@JsonPropertyOrder 用于類, 指定屬性在序列化時(shí) json 中的順序 , 示例: 
@JsonPropertyOrder({ "birth_Date", "name" }) 
public class Person
@JsonCreator 用于構(gòu)造方法,和 @JsonProperty 配合使用,適用有參數(shù)的構(gòu)造方法。 示例: 
@JsonCreator 
public Person(@JsonProperty("name")String name) {…}
@JsonAnySetter 用于屬性或者方法,設(shè)置未反序列化的屬性名和值作為鍵值存儲(chǔ)到 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ù),喜歡的可以自己研究下

那么性能如何呢?

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

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

如果面試官問為什么選擇FastJson?因?yàn)榭?!這一個(gè)理由就可以把他頂回去了。

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

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

所以整體上來說Jackson 綜合評價(jià)應(yīng)該是很不錯(cuò)的。

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

相關(guān)文章

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

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

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

    Java中Future接口詳解

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

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

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

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

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

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

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

    idea手動(dòng)導(dǎo)入了包但編譯運(yùn)行還是報(bào)找不到xxx.jar包的解決方案

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

    使用spring-data-redis中的Redis事務(wù)

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

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

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

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

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

    Java實(shí)現(xiàn)模擬鍵盤鼠標(biāo)操作工具

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

最新評論

惠安县| 龙游县| 合肥市| 天水市| 绥化市| 海兴县| 瑞丽市| 林芝县| 乐山市| 喀什市| 临澧县| 白山市| 拜城县| 沁阳市| 东丽区| 正安县| 湛江市| 长宁区| 宣威市| 如东县| 定安县| 晋城| 富民县| 平果县| 饶阳县| 应城市| 客服| 堆龙德庆县| 临安市| 江达县| 乐山市| 怀安县| 民县| 易门县| 东阳市| 洪雅县| 隆林| 凤阳县| 聊城市| 宁远县| 垫江县|