fastjson2
fastjson2 copied to clipboard
[QUESTION]首字母为单个字母的驼峰转换问题
@Data public class TestVo(){
//JSON.toJSONString()会转换为PName private String pName; //JSON.toJSONString()转化正常 private String proName;
}
public void testJSONToString(){ TestVo testVo = new TestVo(); testVo.setPName("test"); testVo.setProName("test1"); System.out.println(JSON.toJSONString(vo)); //期望输出: {"pName":"test", "proName":"test1"} //实际输出: {"PName":"test", "proName":"test1"} }
问题补充:
- 使用lomok时,set方法为setPName(), 转换异常
- 正常生成的set方法为setpName(),能够正常转换
- 使用兼容版本的JSON.toJSONString(),两种方式都能正常转换
同样的问题
现在的实现是参考java.beans.Introspector#decapitalize方法:
package java.beans;
public class Introspector {
public static String decapitalize(String name) {
if (name == null || name.length() == 0) {
return name;
}
if (name.length() > 1 && Character.isUpperCase(name.charAt(1)) &&
Character.isUpperCase(name.charAt(0))){
return name;
}
char chars[] = name.toCharArray();
chars[0] = Character.toLowerCase(chars[0]);
return new String(chars);
}
}
fastjson 1.x的实现,一直有人反馈说不对,希望和java.beans.Introspector#decapitalize方法一致,为了保证兼容一直没改。现在是2.0就改了。
下面分别是fastjson2、jackson、fastjson1、gson的结果,各不相同,如下:
// fastjson2
{"PName":"test"}
// jackson
{"pname":"test"}
// fastjson1 & gson
{"pName":"test"}
你可以通过配置JSONField输出你要的,或者你用最新版本的2.0.13-SNAPSHOT版本,然后把field声明为public,比如:
@Data
public class Bean1 {
public String pName;
}
https://github.com/alibaba/fastjson2/releases/tag/2.0.13 2.0.13版本已经发布,请用帮忙用新版本验证
Zaifa 我就拉黑你啦
| | Zhr | | @.*** |
---- 回复的原邮件 ---- | 发件人 | @.> | | 发送日期 | 2022年09月10日 15:55 | | 收件人 | @.> | | 抄送人 | @.***> | | 主题 | Re: [alibaba/fastjson2] [QUESTION]首字母为单个字母的驼峰转换问题 (Issue #607) |
https://github.com/alibaba/fastjson2/releases/tag/2.0.13 2.0.13版本已经发布,请用帮忙用新版本验证
— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you are subscribed to this thread.Message ID: @.***>