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

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

相关推荐
.生产的驴7 分钟前
Electron Vue框架环境搭建 Vue3环境搭建
java·前端·vue.js·spring boot·后端·electron·ecmascript
爱学的小涛15 分钟前
【NIO基础】基于 NIO 中的组件实现对文件的操作(文件编程),FileChannel 详解
java·开发语言·笔记·后端·nio
爱学的小涛16 分钟前
【NIO基础】NIO(非阻塞 I/O)和 IO(传统 I/O)的区别,以及 NIO 的三大组件详解
java·开发语言·笔记·后端·nio
北极无雪21 分钟前
Spring源码学习:SpringMVC(4)DispatcherServlet请求入口分析
java·开发语言·后端·学习·spring
爱码少年26 分钟前
springboot工程中使用tcp协议
spring boot·后端·tcp/ip
2401_857622668 小时前
SpringBoot框架下校园资料库的构建与优化
spring boot·后端·php
2402_857589368 小时前
“衣依”服装销售平台:Spring Boot框架的设计与实现
java·spring boot·后端
哎呦没9 小时前
大学生就业招聘:Spring Boot系统的架构分析
java·spring boot·后端
_.Switch10 小时前
Python Web 应用中的 API 网关集成与优化
开发语言·前端·后端·python·架构·log4j
杨哥带你写代码11 小时前
足球青训俱乐部管理:Spring Boot技术驱动
java·spring boot·后端