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

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

相关推荐
用户7851278147010 分钟前
Python代码获取京东商品详情原数据 API 接口(item_get_app)
后端
JAVA数据结构11 分钟前
BPMN-Activiti-简单流程委托
后端
sivdead18 分钟前
智能体记忆机制详解
人工智能·后端·agent
拉不动的猪42 分钟前
图文引用打包时的常见情景解析
前端·javascript·后端
该用户已不存在1 小时前
程序员的噩梦,祖传代码该怎么下手?
前端·后端
间彧1 小时前
Redis缓存穿透、缓存雪崩、缓存击穿详解与代码实现
后端
摸鱼的春哥1 小时前
【编程】是什么编程思想,让老板对小伙怒飙英文?Are you OK?
前端·javascript·后端
Max8122 小时前
Agno Agent 服务端文件上传处理机制
后端
调试人生的显微镜2 小时前
苹果 App 怎么上架?从开发到发布的完整流程与使用 开心上架 跨平台上传
后端
顾漂亮2 小时前
Spring AOP 实战案例+避坑指南
java·后端·spring