JSON序列化对象时,属性⾸字母要求⼤写项⽬中碰到了在 JSON序列化对象时,属性⾸字母要求⼤写的问题,收集了⼏种解决⽅法,记录⼀下
涉及到的JSON版本: jackson:1.9.12,fastjson:1.2.7
Bean对象User,有两个属性:name和sex
public class User {
private String name;
private String age;
public String getName() {
return name;
}
public void setName(String name) {
name= name;
}
fastjson忽略属性public String getAge() {
return age;
}
public void setAge(String age) {
age= age;
}
}
@Test
public void json() {
User user = new User();
user.setName("name");
user.setAge("13");
String str = JSONString(user);
System.out.String());
}
1、属性设为public,不需要对应的getXxx()⽅法
如:
public String name;
public String age;
序列化结果为: {"Age":"13","Name":"name"}
注:
1)如果加上getXxx()⽅法,字段和getter⽅法都解析了,序列化的结果为:{"Age":"13","Name":"name","age":"13","name":"name"}
为避免输出两套内容,可以在类上加注解:@JsonAutoDetect(JsonMethod.FIELD) ,制定只解析字段名,忽略⽅法
2)@JsonAutoDetect引⼊的是jackson的⽅法,对应的序列化也要使⽤jackson的⽅法
ObjectMapper mapper = new ObjectMapper();
String str = mapper.writeValueAsString(user);
2、属性上加注解 @JSONField( name  = "Xxx")
如:
@JSONField(name = "NNN")
private String name;
@JSONField(name = "AAA")
private String age;
序列化结果: {"AAA":"13","NNN":"name"}
注:此⽅法中,如果属性⾸字母为⼤写,即private String Name; 将不会⽣效
3) @JsonAutoDetect(fieldVisibility=JsonAutoDetect.Visibility.ANY, getterVisibility=JsonAutoDetect.Visibility.NONE)
类上加注解,使⽤jackson提供的API序列化对象,得到的结果:{"Age":"13","Name":"name"}
4)⽹上还有说在初始化 fastJson的时候给TypeUtilspatibleWithJavaBean赋值为true,此⽅法还没试过

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。