Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BUG]public修饰的首字母大写的字段,序列化重复key生成 #3220

Closed
cloudlessa opened this issue Dec 25, 2024 · 6 comments
Closed
Labels
bug Something isn't working fixed
Milestone

Comments

@cloudlessa
Copy link

问题描述

简要描述您碰到的问题。

首字母大写的字段,序列化重复key生成

环境信息

请填写以下信息:

  • OS信息: [e.g.:MacOS Monterey]
  • JDK信息: [e.g.:Openjdk 17.0.3]
  • 版本信息:[e.g.:Fastjson2 2.0.53]

重现步骤

如何操作可以重现该问题:

public class Param {

          public String UserName;
          String Code;
          String Sort;
          String Status;

   //省略get和set

          public static void main(String[] args)  {
                  Param param = new Param();
                  param.setUserName("张三");
                  param.setCode("001");
                  param.setSort("1");
                  param.setStatus("正常");
                  System.out.println("json: " + JSON.toJSONString(param));
         }

}

当字段首字母大写,并且用public修饰的时候,生成的json字符串key会重复,如下:

image

期待的正确结果

对您期望发生的结果进行清晰简洁的描述。

相关日志输出

请复制并粘贴任何相关的日志输出。

附加信息

如果你还有其他需要提供的信息,可以在这里填写(可以提供截图、视频等)。

@cloudlessa cloudlessa added the bug Something isn't working label Dec 25, 2024
@mek1986
Copy link
Contributor

mek1986 commented Dec 31, 2024

@cloudlessa 因为你的字段UserName,不是标准的驼峰命名的原因
两种解决办法,你看哪种满足需求?

  • 办法一:添加@JSONField注解
        @JSONField(name = "UserName")
        public String UserName;
  • 方法二:字段名改成驼峰userName
        public String userName;

@mek1986
Copy link
Contributor

mek1986 commented Dec 31, 2024

序列化时,会同时查找方法和字段

  1. public的字段会独立序列化
  2. 方法则会根据方法名进行反序列化(is,get等规则)

@wenshao wenshao added this to the 2.0.54 milestone Jan 1, 2025
@wenshao wenshao added the fixed label Jan 1, 2025
@cloudlessa
Copy link
Author

@cloudlessa 因为你的字段UserName,不是标准的驼峰命名的原因 两种解决办法,你看哪种满足需求?

  • 办法一:添加@JSONField注解
        @JSONField(name = "UserName")
        public String UserName;
  • 方法二:字段名改成驼峰userName
        public String userName;

这两个都不能用诶,因为这个是用的sdk里面的包,没办法修改

@cloudlessa cloudlessa closed this as not planned Won't fix, can't repro, duplicate, stale Jan 2, 2025
@wenshao
Copy link
Member

wenshao commented Jan 2, 2025

https://oss.sonatype.org/content/repositories/snapshots/com/alibaba/fastjson2/fastjson2/2.0.54-SNAPSHOT/
问题已修复,请帮忙用2.0.54-SNAPSHOT版本验证,2.0.54正式版预计在1月12日前发布。

@cloudlessa
Copy link
Author

fastjson2-2.0.54-20250102.033302-13.jar这个版本可以了

@wenshao
Copy link
Member

wenshao commented Jan 12, 2025

https://github.com/alibaba/fastjson2/releases/tag/2.0.54
新版本已发布,请用新版本

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working fixed
Projects
None yet
Development

No branches or pull requests

3 participants