一、序列化对象成字符串时,如何自定义属性名
使用 com.alibaba.fastjson.annotation.JSONField 注解即可
@Data
public class StudentDto {
@JSONField(name="my_name")
private String name;
@JSONField(name="my_age")
private Integer age;
}
序列化结果为:
{“my_age”:10,“my_name”:“zhangsan”}
二、序列化对象成字符串时,如何保持属性定义的顺序
如上的执行结果,是按照字母顺序排列的, my_age 在 my_name 前面,和我们的定义顺序不一样。
经过我多方查找,终于发现了解决方案:
答案来源:https://github.com/alibaba/fastjson/issues/3115
结论:
JSON.DEFAULT_GENERATE_FEATURE &= ~SerializerFeature.SortField.getMask();
SerializeConfig serializeConfig = new SerializeConfig(true);
System.out.println(JSON.toJSONString(javaObject, serializeConfig));
执行结果为:
{“my_name”:“zhangsan”,“my_age”:10}
符合预期
三、序列号 JSONObject 时,如何保持字段加入的顺序
如下面的例子:
@Test
public void test1() {
JSONObject jsonObject = new JSONObject();
jsonObject.put("c", 10);
jsonObject.put("a", 11);
jsonObject.put("d", 12);
jsonObject.put("b", 13);
System.out.println(JSON.toJSON(jsonObject));
}
执行结果为:
{“a”:11,“b”:13,“c”:10,“d”:12}
发现不是按我们加入的顺序来序列化的,只需要在新建 JSONObject 对象时,给它指定容器即可
JSONObject jsonObject = new JSONObject(new LinkedHashMap<>());
此时执行结果为:
{“c”:10,“a”:11,“d”:12,“b”:13}
符合预期