Java 中 json 序列化如何保证顺序
Json 在序列化时是无序的,但是我们可以通过一些设置的方式去保证其有序性,当然这和我们使用的序列化框架也是有关系的。
Json 在序列化时是无序的,但是我们可以通过一些设置的方式去保证其有序性,当然这和我们使用的序列化框架也是有关系的。
Gson
如果使用的是 gson 作为序列化工具的话,那么只能写一个类去继承 Gson 的 TypeAdapter 这个类,然后重写 write 方法。
可以参考:
https://blog.csdn.net/pei19890521/article/details/85116507
fastjson
fastjson 相对比较简单
@Data
public class Student {
private String name;
private Integer age;
}
import com.alibaba.fastjson.JSONObject;
import com.amazonaws.util.json.Jackson;
public class Test {
public static void main(String[] args) {
Student student = new Student();
student.setName("xxx");
student.setAge(18);
System.out.println(JSONObject.toJSONString(student));
}
}
这时候输出
{“age”:18,“name”:“xxx”}
其输出的字段顺序和 Student 这个类中定义的字段顺序不一致。
这个时候我们可以在这个类上增加一个注解,来指定顺序。
@Data
@JsonPropertyOrder({"name", "aeg"})
public class Student {
private String name;
private Integer age;
}
这个时候就会输出
{“name”:“xxx”,“age”:18}
Jackson
Jackson 其实也是 spring web 默认使用的序列化方式。
@Data
public class Student {
private String name;
private Integer age;
}
import com.amazonaws.util.json.Jackson;
public class Test {
public static void main(String[] args) {
Student student = new Student();
student.setName("xxx");
student.setAge(18);
System.out.println(Jackson.toJsonString(student));
}
}
这个时候会输出
{“name”:“xxx”,“age”:18}
看似和字段定义的顺序一致,但是并不是百分之百和字段定义的顺序一致。我们可以通过在字段上增加注解来指定字段序列化之后的排序。
@Data
public class Student {
@JsonProperty(index = 1)
private String name;
@JsonProperty(index = 0)
private Integer age;
}
这个时候就会输出
{“age”:18,“name”:“xxx”}
这个顺序就和 JsonProperty 这个注解上指定的 index 的顺序一致了。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)