fastjson序列化对象后属性变更问题

使用fastjson进行JSON序列化存储到数据库后,发现JSON字符串“莫名其妙地”多了一些属性。


public class MyClass {

    // boolean 类型的属性
    private boolean isActive;
    private boolean valid;

    // int 类型的属性
    private int id;

    // 默认构造器
    public MyClass() {
    }

    // 带有所有属性的构造器
    public MyClass(boolean isActive, boolean valid, int id) {
        this.isActive = isActive;
        this.valid = valid;
        this.id = id;
    }

    // isActive 的 getter 和 setter 方法
    public boolean isActive() {
        return isActive;
    }

    public void setActive(boolean isActive) {
        this.isActive = isActive;
    }

    // valid 的 getter 和 setter 方法
    public boolean getValid() {
        return valid;
    }

    public void setValid(boolean valid) {
        this.valid = valid;
    }

    // id 的 getter 和 setter 方法
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
}

测试 

### Fastjson 使用指南与常见问题解析 Fastjson 是阿里巴巴开源的一款高性能 JSON 处理库,广泛应用于 Java 开发中。它支持将 Java 对象转换为 JSON 字符串,也可以将 JSON 字符串反序列化Java 对象。由于其简洁的 API 和高效的性能,Fastjson 在实际开发中被大量使用。 #### 常见数据类型的 JSON 格式 JSON 支持的数据类型包括字符串、数值、布尔值、数组、对象和 null。在 Fastjson 中,这些类型可以直接映射到 Java 的基本类型或集合类上[^2]。 #### 快速上手 ##### 依赖配置 要在项目中使用 Fastjson,首先需要添加 Maven 依赖: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.83</version> </dependency> ``` ##### 实体类定义 定义一个简单的 Java Bean: ```java public class User { private String name; private int age; // Getter and Setter } ``` ##### 序列化与反序列化测试 使用 Fastjson 进行序列化和反序列化的示例如下: ```java User user = new User(); user.setName("John"); user.setAge(30); // 序列化 String jsonString = JSON.toJSONString(user); System.out.println(jsonString); // 输出: {"name":"John","age":30} // 反序列化 User parsedUser = JSON.parseObject(jsonString, User.class); System.out.println(parsedUser.getName()); // 输出: John ``` #### 常见用法 ##### 序列化操作 - **对象转换为 JSON 串**:`JSON.toJSONString(object)` - **List 转换为 JSON 串**:`JSON.toJSONString(list)` - **Map 转换为 JSON 串**:`JSON.toJSONString(map)` ##### 反序列化操作 - **JSON 串转换对象**:`JSON.parseObject(jsonString, Class<T> clazz)` - **JSON 串转换为 Map**:`JSON.parseObject(jsonString, Map.class)` - **JSON 串转换为 List**:`JSON.parseArray(jsonString, Class<T> clazz)` #### 常见问题及解决方案 ##### 如何处理日期毫秒值问题 Fastjson 提供了 `SerializerFeature` 来控制日期格式化方式。例如,可以使用 `WriteDateUseDateFormat` 特性来避免输出时间戳而是直接输出日期字符串: ```java String dateString = JSON.toJSONString(new Date(), SerializerFeature.WriteDateUseDateFormat); ``` ##### 定制化序列化字段 可以通过注解 `@JSONField` 来定制字段的序列化行为,如设置名称、排序等属性: ```java public class User { @JSONField(name = "username") private String name; @JSONField(ordinal = 1) private int age; } ``` ##### 指定某些字段不序列化 如果希望某个字段不在序列化结果中出现,可以在字段上加上 `@JSONField(serialize = false)` 注解。 ##### 自定义序列化器 对于复杂对象,可以实现 `ObjectSerializer` 接口来自定义序列化逻辑,并通过 `TypeReference` 或者全局配置注册该序列化器。 ##### 使用 ordinal 指定字段的顺序 通过 `@JSONField(ordinal = N)` 可以指定字段在 JSON 输出中的顺序。 ##### 序列化起别名 利用 `@JSONField(name = "aliasName")` 可以为字段设置别名,在生成的 JSON 中使用指定的名称。 ##### 空值序列化操作处理 默认情况下,Fastjson 不会序列化空值。若需包含空值,可启用 `SerializerFeature.WriteMapNullValue` 特性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

骆驼整理说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值