java - 如何在 Gson 序列化中保持字段顺序

似乎 Gson.toJson(Object object) 生成带有随机分布的对象字段的 JSON 代码。有没有办法以某种方式修复字段顺序?

public class Foo {
    public String bar;
    public String baz;
    public Foo( String bar, String baz ) {
        this.bar = bar;
        this.baz = baz;
    }
}
Gson gson = new Gson();
String jsonRequest = gson.toJson(new Foo("bar","baz"));

字符串jsonRequest可以是:

  • { "bar":"bar", "baz":"baz"}(正确)
  • { "baz":"baz", "bar":"bar"}(顺序错误)

最佳答案

您需要创建一个自定义 JSON 序列化程序。

例如

public class FooJsonSerializer implements JsonSerializer<Foo> {

    @Override
    public JsonElement serialize(Foo foo, Type type, JsonSerializationContext context) {
        JsonObject object = new JsonObject();
        object.add("bar", context.serialize(foo.getBar());
        object.add("baz", context.serialize(foo.getBaz());
        // ...
        return object;
    }

}

并按如下方式使用:

Gson gson = new GsonBuilder().registerTypeAdapter(Foo.class, new FooJsonSerializer()).create();
String json = gson.toJson(foo);
// ...

这将保持您在序列化程序中指定的顺序。

另见:

  • Gson User Guide - Custom serializers and deserializers

https://stackoverflow.com/questions/6365851/

相关文章:

javascript - 使用 jQuery 检查 JSON 对象中是否存在键

ruby-on-rails-3 - 如何使用 ActiveModel::Serializers 为同

json - 如何将 JSON 文件导入 TypeScript 文件?

javascript - 有没有一种快速的方法可以在文本编辑器中将 JavaScript 对象转换为

javascript - D3.js:使用图像(在数据中指定文件名)作为轴上的刻度值

python - 从文本文件中检索变量值的最佳方法?

java - Jackson @JsonProperty(required=true) 不会抛出异常

java - Jackson - 反序列化 JSON 字符串 - TypeReference 与 T

java - 如何将 JSON 字段名称映射到不同的对象字段名称?

sql - Postgresql 中的 `->>` 和 `->` 有什么区别?