Java Json序列化详解

一、Json 简介

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它基于ECMAScript的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得json成为理想的数据交换语言。比起xml的灵活性,json更加轻量级、易于阅读和书写。

下面是一个Json的例子:

{
  "name": "John",
  "age": 30,
  "city": "New York"
}

二、Java Json 序列化

1. jackson 库

Jackson 是一款快速、低消耗、多功能的 Java 库,用于处理 Java 对象与 JSON 数据之间的转换。Jackson 提供了两个主要的 API:一是 Streaming API,另一个是 Data Binding API。

2. Fastjson 库

Fastjson 是一个 Java 的 JSON 解析器和生成器,它是目前最快的 JSON 处理器之一。

三、使用 Jackson 库进行 Json 序列化

1. 添加 Jackson 库的 Maven 依赖

在 pom.xml 文件中添加以下依赖:

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

2. 创建一个 Java 类

在项目中创建一个实体类,例如 Person:

public class Person {
   private String name;
   private int age;
   private String city;

   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;
   }

   public String getCity() {
      return city;
   }

   public void setCity(String city) {
      this.city = city;
   }
}

3. 在代码中实现序列化

下面是一个例子,将 person 对象序列化为 json 格式:

public class JsonDemo {
    public static void main(String[] args) throws JsonProcessingException {
       Person person = new Person();
       person.setName("John");
       person.setAge(30);
       person.setCity("New York");
       
       ObjectMapper objectMapper = new ObjectMapper();
       String jsonString = objectMapper.writeValueAsString(person);
       System.out.println(jsonString);
    }
}

输出结果如下:

{"name":"John","age":30,"city":"New York"}

四、使用 Fastjson 库进行 Json 序列化

1. 添加 Fastjson 库的 Maven 依赖

在 pom.xml 文件中添加以下依赖:

<dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>fastjson</artifactId>
   <version>1.2.47</version>
</dependency>

2. 在代码中实现序列化

下面是一个例子,将 person 对象序列化为 json 格式:

public class JsonDemo {
    public static void main(String[] args) {
       Person person = new Person();
       person.setName("John");
       person.setAge(30);
       person.setCity("New York");
       
       String jsonString = JSON.toJSONString(person);
       System.out.println(jsonString);
    }
}

输出结果如下:

{"name":"John","age":30,"city":"New York"}

五、Json 序列化注意事项

1.对象必须提供无参构造函数

Jackson 和 Fastjson 在编写时,都需要默认构造函数(无参构造函数)。因为在反序列化时,需要先创建一个空对象,再给其成员变量赋值。所以,如果对象没有无参构造函数,就会反序列化失败。

2.对象成员变量必须保留 getter 和 setter 方法

在进行序列化和反序列化时,会通过反射获取对象的成员变量,如果这些成员变量没有提供 getter 和 setter 方法,则会出现异常。

3.其他注意事项

对于特殊字符,例如缩进和换行等,可以设置序列化的特性,比如 jackson 中可以设置 SerializationFeature.INDENT_OUTPUT。

结论

Java Json 序列化是一种比较常见的操作。本文详细介绍了使用 Jackson 和 Fastjson 库进行 Json 序列化的方法,同时讲述了在进行序列化时需要注意的事项。相信对 Java 开发人员进行 Json 序列化应该能够有所帮助。

原创文章,作者:PXNXN,如若转载,请注明出处:https://www.506064.com/n/368725.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
PXNXNPXNXN
上一篇 2025-04-12 01:13
下一篇 2025-04-12 13:00

相关推荐

  • Java JsonPath 效率优化指南

    本篇文章将深入探讨Java JsonPath的效率问题,并提供一些优化方案。 一、JsonPath 简介 JsonPath是一个可用于从JSON数据中获取信息的库。它提供了一种DS…

    编程 2025-04-29
  • 金额选择性序列化

    本文将从多个方面对金额选择性序列化进行详细阐述,包括其定义、使用场景、实现方法等。 一、定义 金额选择性序列化指根据传入的金额值,选择是否进行序列化,以达到减少数据传输的目的。在实…

    编程 2025-04-29
  • java client.getacsresponse 编译报错解决方法

    java client.getacsresponse 编译报错是Java编程过程中常见的错误,常见的原因是代码的语法错误、类库依赖问题和编译环境的配置问题。下面将从多个方面进行分析…

    编程 2025-04-29
  • Java Bean加载过程

    Java Bean加载过程涉及到类加载器、反射机制和Java虚拟机的执行过程。在本文中,将从这三个方面详细阐述Java Bean加载的过程。 一、类加载器 类加载器是Java虚拟机…

    编程 2025-04-29
  • Java腾讯云音视频对接

    本文旨在从多个方面详细阐述Java腾讯云音视频对接,提供完整的代码示例。 一、腾讯云音视频介绍 腾讯云音视频服务(Cloud Tencent Real-Time Communica…

    编程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介绍

    本文将详细介绍Java Milvus SearchParam withoutFields的相关知识和用法。 一、什么是Java Milvus SearchParam without…

    编程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java语言中的一个版本,于2014年3月18日发布。本文将从多个方面对Java 8中某一周的周一进行详细的阐述。 一、数组处理 Java 8新特性之一是Stream…

    编程 2025-04-29
  • Java判断字符串是否存在多个

    本文将从以下几个方面详细阐述如何使用Java判断一个字符串中是否存在多个指定字符: 一、字符串遍历 字符串是Java编程中非常重要的一种数据类型。要判断字符串中是否存在多个指定字符…

    编程 2025-04-29
  • VSCode为什么无法运行Java

    解答:VSCode无法运行Java是因为默认情况下,VSCode并没有集成Java运行环境,需要手动添加Java运行环境或安装相关插件才能实现Java代码的编写、调试和运行。 一、…

    编程 2025-04-29
  • Java任务下发回滚系统的设计与实现

    本文将介绍一个Java任务下发回滚系统的设计与实现。该系统可以用于执行复杂的任务,包括可回滚的任务,及时恢复任务失败前的状态。系统使用Java语言进行开发,可以支持多种类型的任务。…

    编程 2025-04-29

发表回复

登录后才能评论