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

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

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

Jackson是什么?

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

json 复制代码
{  
  "author": "一路向北_Coding",  
  "age": 20,  
  "hobbies": ["coding", "leetcode", "reading"]
}

那Jackson是做什么的呢?

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

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

arduino 复制代码
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依赖

xml 复制代码
<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的使用方法,能满足大部分业务场景;

首先定义一个映射对象:

arduino 复制代码
private static final ObjectMapper MAPPER;

1、Java对象转化为JSON

typescript 复制代码
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对象

带泛型:

typescript 复制代码
public static <T> T toObject(String jsonString, TypeReference<T> typeReference) {
    return toObject(jsonString, null, typeReference);
}

不带泛型:

typescript 复制代码
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

kotlin 复制代码
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

typescript 复制代码
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注解等等,大家需要用到的时候可以去官网进行学习。

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

相关推荐
Asthenia04123 分钟前
AtomicStampedReference实现原理分析
后端
Starwow21 分钟前
微服务之gRPC
后端·微服务·golang
Asthenia041224 分钟前
AtomicMarkableReference如何解决ABA问题:深入分析
后端
Asthenia041242 分钟前
Fail-Fast与快照机制深入解析及并发修改机制拷打
后端
Pasregret1 小时前
观察者模式:从博客订阅到消息队列的解耦实践
后端·观察者模式
考虑考虑2 小时前
Springboot捕获feign抛出的异常
spring boot·后端·spring
洛神灬殇2 小时前
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 时间事件处理部分)
redis·后端
DataFunTalk2 小时前
Foundation Agent:深度赋能AI4DATA
前端·后端·算法
楽码2 小时前
一文看懂隐藏功能!语言的逃逸分析
后端·go·编程语言
RunsenLIu2 小时前
基于Django实现的图书分析大屏系统项目
后端·python·django