当前位置: 首页 > news >正文

Java:Json反序列化自定义类

在Java中,使用Jackson或Gson等库可以方便地实现JSON的反序列化操作。下面将分别介绍如何使用Jackson和Gson来实现自定义类的反序列化。

使用Jackson

首先,确保项目中已经添加了Jackson的依赖。如果你使用的是Maven,可以在pom.xml中添加如下依赖:

<dependency>

<groupId>com.fasterxml.jackson.core</groupId>

<artifactId>jackson-databind</artifactId>

<version>2.13.0</version>

</dependency>

假设你有一个自定义类Person

public class Person {

private String name;

private int age;

// 标准的构造函数、getter和setter方法

public Person() {

}

public Person(String name, int age) {

this.name = name;

this.age = age;

}

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;

}

}

反序列化的代码示例:

import com.fasterxml.jackson.databind.ObjectMapper;

public class JacksonExample {

public static void main(String[] args) {

String json = "{\"name\":\"John\", \"age\":30}";

ObjectMapper mapper = new ObjectMapper();

try {

Person person = mapper.readValue(json, Person.class);

System.out.println(person.getName() + ", " + person.getAge());

} catch (Exception e) {

e.printStackTrace();

}

}

}

使用Gson

同样,确保你的项目中已经添加了Gson的依赖。如果你使用的是Maven,可以在pom.xml中添加如下依赖:

<dependency>

<groupId>com.google.code.gson</groupId>

<artifactId>gson</artifactId>

<version>2.8.8</version>

</dependency>

假设你有一个自定义类Person

public class Person {

private String name;

private int age;

// 标准的构造函数、getter和setter方法省略,同上例。

}

反序列化的代码示例:

import com.google.gson.Gson;

public class GsonExample {

public static void main(String[] args) {

String json = "{\"name\":\"John\", \"age\":30}";

Gson gson = new Gson();

Person person = gson.fromJson(json, Person.class);

System.out.println(person.getName() + ", " + person.getAge());

}

}

注意事项:

  1. 字段匹配:确保JSON中的字段名与Java类中的字段名匹配。如果不匹配,你可以使用注解(如@JsonProperty在Jackson中)来指定字段名。例如,在Jackson中:@JsonProperty("name")

  2. 构造函数:Jackson默认使用默认构造函数进行反序列化,如果需要使用其他构造函数(如带参数的构造函数),可以使用@JsonCreator注解标记对应的构造函数。Gson默认不支持带参数的构造函数,需要通过自定义的反序列化器来实现。例如,在Gson中你可以创建一个自定义的反序列化器:new GsonBuilder().registerTypeAdapter(Person.class, new PersonDeserializer()).create();。这里PersonDeserializer是一个实现了JsonDeserializer<Person>接口的类,用于定义如何从JSON反序列化到Person对象。

  3. 日期类型:如果你有日期字段,确保正确处理日期格式,Jackson和Gson都支持自定义日期格式或使用特定的日期类型适配器。例如,在Jackson中可以使用@JsonFormat注解,在Gson中可以通过自定义TypeAdapter实现。 例如,在Gson中使用自定义TypeAdapter:Gson gson = new GsonBuilder().registerTypeAdapter(Date.class, new JsonDeserializer<Date>() { ... }).create(); 这里的匿名类实现了`JsonDeserializer<Date>`接口。 同样,你可以为其他复杂类型创建自定义的序列化器和反序列化器。

http://www.dtcms.com/a/263189.html

相关文章:

  • 计算机网络(一)层
  • 【基于Nest.js+React的全栈项目-00篇】开篇目录:25年新开系列文章,望多多支持~
  • 06_Americanas精益管理项目_数据分析
  • 卡片跳转到应用页面(router事件)
  • 阿里云-Docker的使用
  • 手动续期证书后自动上传到阿里云
  • 9.6 视觉专家模块+1536超清解析!智谱CogVLM-9B多模态模型中文场景实战评测,性能炸裂吊打LLaVA
  • 笨方法学python -练习6
  • MySQL 慢查询日志详解
  • Arduino IDE ESP8266连接0.96寸SSD1306 IIC单色屏显示北京时间
  • 第81题:搜索旋转排序数组Ⅱ
  • PHP:历经岁月沉淀的Web开发利器
  • 如何查看服务器的运行日志?
  • mysql 分组后时间没有按照最新时间倒序
  • PHP安装使用教程
  • 气候智能体:AI如何重构人类应对气候危机的决策体系?
  • FastAPI 学习(二)
  • 三态门Multisim电路仿真——硬件工程师笔记
  • 重构老项目不再“踩雷”:飞算JavaAI的本地化智能合并实战
  • react setstate
  • 【Java面试】10GB,1GB内存,如何排序?
  • 筑牢医疗AI安全防线:四重防护体系全解析
  • kubernetes(k8s)控制器与案例详解
  • 华为云Flexus+DeepSeek征文|​​华为云ModelArts Studio大模型 + WPS:AI智能PPT生成解决方案​
  • xml.etree.ElementTree.ParseError: parsing finished: 错误原因定位
  • 【Docker基础】Docker数据持久化与卷(Volume)介绍
  • 探索 AI 系统提示与模型资源库:`system-prompts-and-models-of-ai-tools`
  • 键盘第一下无反应
  • 敏捷项目开发工具【Focalboard安装指南】
  • 第三十五章 I2S——音频传输接口