最流行的JSON库---Jackson,详细使用教程,手把手写代码

最近开发时,经常要发http请求上游数据,并解析获取的Json字符串数据,频繁的使用的Jackson库来解析,于是本期就聊一聊Jackson的使用方法和优势所在。

我将从“ 是什么?为什么?怎么用?”三个角度入手,一文搞懂Jackson!

Jackson是什么?

 首先要知道Jackson是什么,就必须知道什么是JSON,相信JSON大家绝不陌生,JSON无非就是一种数据交换格式,其非常轻量,规范统一,可以在任何语言之间传输解析。以下是一个Json的简单示例:

{  
  "author": "一路向北_Coding",  
  "age": 20,  
  "hobbies": ["coding", "leetcode", "reading"]
}

那Jackson是做什么的呢?
我们知道Java中万事万物皆对象,Jackson库就是是一个基于Java语言的开源JSON格式解析工具。它的主要功能是提供JSON解析和生成,简单来说,Jackson就是用于将Java对象与JSON数据进行互相转换,说到这里Jackson的作用是什么就非常的明白了!!!

比如上图那个JSON数据,转化为Java的类无非就是:

class Blog {
    private String author;
    private int age;
    private String[] hobbies;
}

Jackson为什么是最流行的Json库?

首先对于这种JSON序列化的库其实有非常多,比如我们熟悉的Gson,Fastjson等等,当然技术没有完全的好坏,但是从使用情况和社区生态等方面综合看来,Jackson无疑是更胜一筹;

Jackson拥有相当活跃的社区,更新迭代块,据Github相关统计,Jackson是最流行的序列化工具之一,其依赖少,稳定性强,API非常丰富已经让其成为了首选;

更为重要的是:Jackson是Spring系列的默认JSON解析器,这一点足以看出Jackson的地位了吧

如果你还想更加深入的了解Jackson,建议去Jackson官网细细研究一番:Jackson官网
 

Jackson怎么用?

在了解了Jackson是什么以及为什么要用Jackson之后,最最重要的就是上手使用Jackson,这对开发人员是必须熟练掌握的,如何灵活使用Jackson的API,接下来保姆式教学开始!!! 

引入Jackson依赖

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

<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-annotations</artifactId>
</dependency>

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

当然如果你是Spring开发的话,只需要引入spring-boot-starter-web依赖即可,其会自动引入Jackson的全部依赖。

JacksonAPI使用

在实际开发中,我们常常将Jackson相关api封装为一个公共工具类,方便我们来使用;
下面将给出常用四种API的使用方法,能满足大部分业务场景;

首先定义一个映射对象:

private static final ObjectMapper MAPPER;

 1、Java对象转化为JSON

public static String toString(Object obj, String default) {
     try {
            return MAPPER.writeValueAsString(obj);
     } catch (JsonProcessingException e) {
            LOGGER.error("tostirng error" + e.getMessage());
     }
     return default;
}

2、将JSON转化为Java对象

带泛型:
public static <T> T toObject(String jsonString, TypeReference<T> typeReference) {
    return toObject(jsonString, null, typeReference);
}
不带泛型:
public static <T> T toObject(String jsonString, T default, Class<T> clazz) {
    try {
        return MAPPER.readValue(jsonString, clazz);
    } catch (Exception e) {
        LOGGER.error("toObject error:" + e.getMessage());
    }
    return default;
}

 3、将JSON反序列化为List

public static <T> List<T> ofList(String jsonString, Class<T> clazz) {

    if (StringUtil.isBlank(jsonString)) {
        return null;
    }
    CollectionType javaType = MAPPER.getTypeFactory().constructCollectionType(List.class, clazz);
    try {
        return MAPPER.readValue(jsonString, javaType);
    } catch (JsonProcessingException e) {
        LOGGER.error("toList error:" + e.getMessage();
    }
    return null;
}

4、将JSON反序列化为Map

public static <K, V> Map<K, V> ofMap(String jsonString, Class<K> keyClazz, Class<V> valueClazz) {
    if (StringUtil.isBlank(jsonString)) {
        return null;
    }
    MapType javaType = MAPPER.getTypeFactory().constructMapType(Map.class, keyClazz, valueClazz);
    try {
        return MAPPER.readValue(jsonString, javaType);
    } catch (JsonProcessingException e) {
        LOGGER.error("ofMap:" + e.getMessage(), e);
    }
    return null;
}

 总结

以上就是Jackson的介绍和常用的API使用方法,当然Jackson还有更多用法,如JsonNode模型、Jackson注解等等,大家需要用到的时候可以去官网进行学习。

大家如果有疑问或者认为文章有错误的地方,欢迎评论区留言讨论,欢迎大家点个关注,我会持续分享我的一些学习心得或者技术博客~~~

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值