项目中碰到了在
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;
}
public String getAge() {
return age;
}
public void setAge(String age) {
age= age;
}
}
@Test
public void json() {
User user = new User();
("name");
("13");
String str = (user);
(());
}
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() ,制定只解析字段名,忽略方法
2)@JsonAutoDetect引入的是jackson的方法,对应的序列化也要使用jackson的方法
ObjectMapper mapper = new ObjectMapper();
String str = (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=, getterVisibility=)
类上加注解,使用jackson提供的API序列化对象,得到的结果:{"Age":"13","Name":"name"}
4)网上还有说在初始化
fastJson的时候给赋值为true,此方法还没试过