Java Jackson库使用教程

这篇具有很好参考价值的文章主要介绍了Java Jackson库使用教程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Jackson 是一个用于在 Java 中处理 JSON 的强大库。它提供了读写 JSON 数据的便捷方式,并且性能优异。Jackson 的主要优点是它的速度比 Java 原生的 JSON 库快,并且拥有更简洁的 API。在本教程中,我们将学习如何使用 Jackson 库来处理 JSON 数据。

1. 添加依赖

首先,你需要在你的项目中添加 Jackson 的依赖。如果你使用 Maven,你可以在 pom.xml 文件中添加以下依赖:

<dependencies>
    <!-- 其他依赖 -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.13.0</version> <!-- 使用最新版本 -->
    </dependency>
</dependencies>

2. Java对象与JSON的相互转换

2.1 将Java对象转换为JSON字符串

你可以使用 ObjectMapper 类来将 Java 对象转换为 JSON 字符串。

import com.fasterxml.jackson.databind.ObjectMapper;
public class Main {
    public static void main(String[] args) {
        ObjectMapper objectMapper = new ObjectMapper();
        Person person = new Person("张三", 30);
        try {
            String jsonString = objectMapper.writeValueAsString(person);
            System.out.println(jsonString);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
class Person {
    private String name;
    private int age;
    // getter 和 setter 方法
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
}
2.2 将JSON字符串转换为Java对象
import com.fasterxml.jackson.databind.ObjectMapper;
public class Main {
    public static void main(String[] args) {
        ObjectMapper objectMapper = new ObjectMapper();
        String jsonString = "{\"name\":\"张三\",\"age\":30}";
        try {
            Person person = objectMapper.readValue(jsonString, Person.class);
            System.out.println(person.getName());
            System.out.println(person.getAge());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

3. 处理复杂数据结构

Jackson 支持处理复杂的数据结构,如列表、映射、嵌套对象等。

import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class Main {
    public static void main(String[] args) {
        ObjectMapper objectMapper = new ObjectMapper();
        // 创建一个列表和一个映射
        List<Person> people = new ArrayList<>();
        people.add(new Person("张三", 30));
        people.add(new Person("李四", 40));
        Map<String, Person> peopleMap = new HashMap<>();
        peopleMap.put("zhangsan", new Person("张三", 30));
        peopleMap.put("lisi", new Person("李四", 40));
        // 将列表转换为JSON字符串
        try {
            String jsonString = objectMapper.writeValueAsString(people);
            System.out.println(jsonString);
        } catch (Exception e) {
            e.printStackTrace();
        }
        // 将映射转换为JSON字符串
        try {
            String jsonString = objectMapper.writeValueAsString(peopleMap);
            System.out.println(```
            System.out.println(jsonString);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

4. 自定义序列化和反序列化

在某些情况下,你可能需要对 JSON 数据的序列化和反序列化进行更细粒度的控制。Jackson 允许你通过自定义注解来实现这一点。

4.1 序列化
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
public class PersonSerializer extends JsonSerializer<Person> {
    @Override
    public void serialize(Person value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        gen.writeStartObject();
        gen.writeStringField("name", value.getName());
        gen.writeNumberField("age", value.getAge());
        gen.writeEndObject();
    }
}
4.2 反序列化
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
public class PersonDeserializer extends JsonDeserializer<Person> {
    @Override
    public Person deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
        Person person = new Person();
        person.setName(p.getText());
        person.setAge(p.getIntValue());
        return person;
    }
}

5. 处理JSON数组和对象

Jackson 提供了强大的功能来处理 JSON 数组和对象。

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
public class Main {
    public static void main(String[] args) {
        ObjectMapper objectMapper = new ObjectMapper();
        String jsonString = "[{\"name\":\"张三\",\"age\":30},{\"name\":\"李四\",\"age\":40}]";
        try {
            JsonNode rootNode = objectMapper.readTree(jsonString);
            JsonNode peopleNode = rootNode.path("people");
            for (JsonNode personNode : peopleNode) {
                System.out.println(personNode.get("name").asText());
                System.out.println(personNode.get("age").asInt());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

6. 总结

本教程介绍了 Jackson 库在 Java 中处理 JSON 数据的基础知识和高级特性。通过学习本教程,你将能够使用 Jackson 库轻松地将 Java 对象转换为 JSON 字符串,以及将 JSON 字符串转换为 Java 对象。此外,你还将学习如何处理复杂的数据结构,如列表、映射和嵌套对象。在实际开发中,这些技能将帮助你更高效地处理 JSON 数据。
注意:本教程中的代码示例仅用于教学目的,实际应用时可能需要根据具体情况进行调整。文章来源地址https://www.toymoban.com/news/detail-853481.html

到了这里,关于Java Jackson库使用教程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java.lang.noclassdeffounderror: com/fasterxml/jackson/core/util/jacksonfeature

    建议直接查看我的原博 环境: springboot2.3.10.RELEASE jdk1.8 elasticsearch8.8.1 根据官网,使用es时pom文件需要引入json工具,这里使用了jackson-databind: 但是在运行时报了以下错误: 往下翻,发现是找不到JacksonFeature: 2.Debug 猜想可能是因为没有导入jackson-core依赖,检查pom文件,发现已

    2024年01月19日
    浏览(32)
  • java报错:Caused by: fasterxml.jackson.core.JsonParseException: Unexpected character(‘}‘ (code 125))

    出现情况: 使用Swagger或postman发送含有请求参数的post请求时: 报错描述: 原始报错信息: 请求参数截图:  解决问题: 将箭头指向处的逗号去掉即可解决问题!

    2024年02月03日
    浏览(58)
  • Java后端返回的MySQL日期数据在前端格式错误的解决方法,区分jackson和fastjson

    在写web项目的时候经常会遇到后端返回的MySQL 日期数据(date) 类型在前端显示不正确的情况,有的时候会出现一串数字的时间戳,有的时候显示为日期晚了一天。 这是因Json给前端返回数据的时候格式问题造成的 其实总结起来就是一句话在Model部分对于JavaBean定义参数类型的时

    2024年02月03日
    浏览(34)
  • java报错:Caused by: fasterxml.jackson.core.JsonParseException: Unexpected character (‘c‘ (code 99))

    出现情况: 使用Swagger或postman发送含有请求参数的post请求时: 原始报错信息: 请求参数截图:  报错原因: 封装的JSON参数没有按JSON的标准格式  解决问题: 将箭头指向处加上双引号,即可解决问题!

    2024年02月03日
    浏览(41)
  • Redis添加LocalDateTime时间序列化/反序列化Java 8报‘jackson-datatype-jsr310’问题

    错误信息: 1、增加pom依赖 2、对应字段增加属性

    2024年02月11日
    浏览(30)
  • Jackson前后端开发模式必备json利器

    json是我们现代互联网程序最常用的交互格式,是否你在工作中会遇到前端说字段不一致需要改的需求,是否遇到过数据库字段名与javaBean的规范不同,是否遇到过json与javaBean相互转换时因为需求写的土匪代码,这些都可以用Jackson完成,我们经常和json打交道,而Jackson就是帮助

    2024年02月07日
    浏览(28)
  • Jackson 各种注解使用示例

    参考资料 Jackson使い方メモ 在序列化和反序列化 JSON 数据时,忽略指定的属性。 返回数据给前台 ⏹由于给id属性添加了 @JsonIgnore 注解,所以id并没有返回给前台。 同时指定多个需要忽略的属性 ⏹可以看到,因为id和content属性被忽略,所以只有name属性被返回到了前台。 ⏹由

    2024年04月14日
    浏览(24)
  • JSON(一) -- JSON转换工具 -- Jackson的使用

    目录 1.  Jackson的简介: 2.  JSON转换的案例 2.1  对象 = JSON JSON= 对象 2.2  Map = JSON JSON= Map 2.3  List = JSON JSON= List Jackson 是一种用于 Java 应用程序中 JSON 转换的开源库。 以下是使用 Jackson 进行 JSON 转换的基本步骤: (1) 导入 Jackson 库:您需要在项目中导入 Jackson 库,以便在

    2024年02月06日
    浏览(22)
  • Jackson标签的高阶使用样例--多继承/子类、对象id、JsonIdentityInfo、JsonTypeInfo、JsonSubTypes

    最近笔者在开发 大数据平台XSailboat 的 数据资产目录 模块。它的其中一个功能是能定义并查看资产数据。我们支持的资产类型不仅有关系数据库表,也支持Kafka主题,hdfs上的文件等。对于Kafka主题,hdfs文件等,它们没有强模式约束和描述,但为了理解、查看和约束其中的结构

    2024年01月18日
    浏览(27)
  • 04、添加 com.fasterxml.jackson.dataformat -- jackson-dataformat-xml 依赖报错

    Correct the classpath of your application so that it contains a single, compatible version of com.fasterxml.jackson.dataformat.xml.XmlMapper 改用其他版本,我没写版本号,springboot自己默认的是 2.11.4 版本 成功启动项目 能成功返回 xml 的响应

    2024年02月10日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包