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

序列化和反序列化 Json 字符串 @JSONField

        @JSONField 是 FastJSON 库中的一个注解,用于控制 JSON 序列化和反序列化过程中字段的映射。它提供了多种属性,可以灵活地定制 JSON 数据的生成和解析行为。以下是对 @JSONField 注解的详细说明和常见用法:

常见属性

name

  • 作用:指定 JSON 键名。
  • 示例

@JSONField(name = "Mid")
private String mid;
  • 说明:在 JSON 序列化和反序列化时,将 Java 类中的 mid 字段映射为 JSON 对象中的 "Mid" 键。

format

  • 作用:指定日期格式。

  • 示例

@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
  • 说明:在 JSON 序列化和反序列化时,将 createTime 字段格式化为 "yyyy-MM-dd HH:mm:ss" 格式的字符串。

serialize

  • 作用:控制是否进行序列化。

  • 示例

@JSONField(serialize = false)
private String sensitiveInfo;
  • 说明:在 JSON 序列化时,不包含 sensitiveInfo 字段。

deserialize

  • 作用:控制是否进行反序列化。

  • 示例

@JSONField(deserialize = false)
private String internalInfo;
  • 说明:在 JSON 反序列化时,不解析 internalInfo 字段。

ordinal

  • 作用:指定字段的顺序。

  • 示例

@JSONField(ordinal = 1)
private String name;

@JSONField(ordinal = 2)
private int age;
  • 说明:在生成 JSON 字符串时,name 字段会出现在 age 字段之前。

示例

        假设我们有一个 User 类,其中包含多个字段,我们希望在 JSON 序列化和反序列化时进行一些定制:

import com.alibaba.fastjson.annotation.JSONField;
import java.util.Date;
@Data

public class User {
    @JSONField(name = "user_id")
    private int userId;

    @JSONField(name = "user_name")
    private String userName;

    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;

    @JSONField(serialize = false)
    private String password;

    @JSONField(deserialize = false)
    private String token;
}

序列化和反序列化示例

序列化

import com.alibaba.fastjson.JSON;

public class Main {
    public static void main(String[] args) {
        User user = new User(1, "Alice", new Date(), "secretPassword");
        String json = JSON.toJSONString(user);
        System.out.println(json);
    }
}

输出的 JSON 字符串将是:

{
  "user_id": 1,
  "user_name": "Alice",
  "createTime": "2025-01-15 12:00:00"
}

反序列化

import com.alibaba.fastjson.JSON;

public class Main {
    public static void main(String[] args) {
        String json = "{\"user_id\":1,\"user_name\":\"Alice\",\"createTime\":\"2025-01-15 12:00:00\"}";
        User user = JSON.parseObject(json, User.class);
        System.out.println(user.getUserId()); // 输出: 1
        System.out.println(user.getUserName()); // 输出: Alice
        System.out.println(user.getCreateTime()); // 输出: 2025-01-15 12:00:00
        System.out.println(user.getPassword()); // 输出: null
        System.out.println(user.getToken()); // 输出: null
    }
}

总结

        @JSONField 注解在 FastJSON 库中非常有用,它可以帮助开发者精确控制 JSON 序列化和反序列化的行为,确保 JSON 数据的一致性和正确性。通过指定键名、格式化日期、控制字段的序列化和反序列化等,可以灵活地处理复杂的 JSON 数据结构。


http://www.kler.cn/a/506663.html

相关文章:

  • C++实现设计模式---外观模式 (Facade)
  • 【Rust自学】12.4. 重构 Pt.2:错误处理
  • 大疆最新款无人机发布,可照亮百米之外目标
  • [Qualcomm]Qualcomm MDM9607 SDK代码下载操作说明
  • 中间件以及主流中间件产品:IBM MQSeries和BEA Tuxedo介绍
  • 【2024年华为OD机试】 (C卷,100分)- 用连续自然数之和来表达整数(Java JS PythonC/C++)
  • XML在线格式化 - 加菲工具
  • Flurl:一个Star 3.9K的链式RESTful风格HTTP开源.Net库
  • 【Linux】13.Linux进程概念(2)
  • OSPF的LSA的学习研究
  • leetcode 3095. 或值至少 K 的最短子数组 I
  • PHP xml 常用函数整理
  • Web前端------HTML表格
  • ThinkPHP 8的一对一关联
  • centos安装golang
  • javascript基础从小白到高手系列一:使用cookie 的注意事项
  • 【编译构建】用cmake编译libjpeg动态库并实现转灰度图片
  • AST抽象语法树
  • Vue 和 uniApp 中 CSS 样式差别
  • Dart语言的多线程编程
  • VUE中css样式scope和deep
  • 创客匠人老蒋:创始人IP如何为传统产业注入新活力?
  • kubernetes V1.32强制删除namespace
  • 什么是CDN,为什么他可以做缓存?
  • easyui datagrid表头和网格错位问题
  • 【0393】Postgres内核 checkpointer process ③ 构建 WAL records 工作缓存区