Java - [再遇fastjson2] Key自动将属性首字母转小写?

本文描述了在使用fastjson2中转换TestUser对象为JSON字符串时,key自动转小写的问题,给出了两种解决方案:使用@JsonField注解指定键名和使用Gson库保持原始属性名。同时,提及了fastjson2的API丰富性及其在业务开发中的便利性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

🤔️问题场景:fastjson2中转JSON字符串时,key会自动将属性首字母转小写?


一、问题还原模拟(💥)
@Data
@Builder
public class TestUser {
    @JSONField(name = "ID")
    private String Id;
    private String Name;
    private Integer Age;
    private Integer age;
    private BigDecimal Salary;

    private Boolean isDeleted;


    private List<String> hobbies;
    private Map<String, String> Tags;

    private String memo;
}

测试转字符串(出现了问题 💣💣💣,key值没有和对象属性名保持一致🤔️)

TestUser anonymous = TestUser.builder()
    .Id(UUID.randomUUID().toString())
    .Name("anonymous")
    .Age(99)
    .memo("-")
    .build();
// {"ID":"1243e654-05b6-4da6-af2b-156b7a223b96","age":99,"memo":"-","name":"anonymous"}
System.out.println(JSONObject.toJSONString(anonymous));

二、解决方案①
  1. @JsonField(name=“Xxx”)
  2. JSONWriter.Feature.FieldBased
 @Test
 void test01() {
     TestUser anonymous = TestUser.builder().Id(UUID.randomUUID().toString()).Name("anonymous").Age(99).memo("-").build();
     System.out.println(JSONObject.toJSONString(anonymous,
             // 键值和属性保持一致(默认会将首字母大写转换为小写), 也可以使用@JsonField注解,注解的优先级最高
             // ⚠️⚠️注意:键和属性名保持一致,且会自动根据键进行排序(ASC)
             JSONWriter.Feature.FieldBased,
             // 格式化
             JSONWriter.Feature.PrettyFormat,
             // 序列化null(布尔->false, 数值->0, 字符串->"", 列表->[])
             JSONWriter.Feature.WriteNullBooleanAsFalse,
             JSONWriter.Feature.WriteNullNumberAsZero,
             JSONWriter.Feature.WriteNullStringAsEmpty,
             JSONWriter.Feature.WriteNullListAsEmpty,
             // 序列化null(优先级低, 会被上面针对null的单独设置覆盖)
             JSONWriter.Feature.WriteNulls
     ));
 }

转换结果⤵️

{
	"Age":99,
	"ID":"f71c41b4-6ec6-4cb7-bebb-36a0f0b7fecf",
	"Name":"anonymous",
	"Salary":0,
	"Tags":null,
	"age":0,
	"hobbies":[],
	"isDeleted":false,
	"memo":"-"
}

三、解决方案②

使用Gson

  1. 默认key与对象属性保持一致
  2. 默认不会对key排序
String json = new Gson().toJson(anonymous);

String json1 = new GsonBuilder()
        // 格式化
        .setPrettyPrinting()
        // 序列化null
        .serializeNulls()
        .create()
    .toJson(anonymous);



之前偶然的机会向fastjson2项目提交过代码,其实认真分析fastjson2后就会发现它暴露了很多API,“多”也具有两面性,如果你认真分析并从业务角度梳理这个组件,你会发现它其实可以轻松完成Map/POJO/JSONString/JSONObject之间的转换,为业务侧开发带来了很大的便利性。

END.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值