【问题标题】:Jackson: Serializing object fields to arrayJackson:将对象字段序列化为数组
【发布时间】:2017-01-07 07:38:01
【问题描述】:

我对@9​​87654323@ 还很陌生,但我偶然发现了以下问题:

我想将一个简单对象序列化为其字段数组。 所以考虑以下类:

public class UserModel {
    private String id;
    private String firstName;
    private String lastName;
    private String email;
    private String company;
}

我得到以下 json:

{
   "id":"cec34b58",
   "firstName":"foo",
   "lastName":"bar",
   "email":"foo@bar.com",
   "company":"FooBar"
}

但我想要的是以下内容:

[
   "cec34b58",
   "foo",
   "bar",
   "foo@bar.com",
   "FooBar"
]

如果有更简单的方法,我想避免使用custom serializer。阅读Jackson Annotations,我没有立即看到允许立即转换模型的东西。 Google 只建议将 Java 的 Collections 序列化为 json,但不建议将 Java Object 序列化为 json 数组。

【问题讨论】:

    标签: java json jackson


    【解决方案1】:

    这不需要自定义序列化程序,只需要简单的注释:

    @JsonFormat(shape=JsonFormat.Shape.ARRAY)
    public class UserModel {
        // ...
    }
    

    【讨论】:

    • 很高兴我能提供帮助!我真希望它更广为人知,对于某些用例来说确实很整洁;可以为紧密耦合的系统压缩消息大小。
    • 另见JsonPropertyOrder注解。
    【解决方案2】:

    您的方案是相当自定义的,因此您必须通过自定义序列化程序来完成。

    还请注意,我建议您修改它,因为在这种情况下添加/删除新字段/更改顺序会更加棘手,特别是如果您不能同时释放客户端和服务器。

    【讨论】:

      【解决方案3】:

      您可以在您的类 UserModel 上添加一个方法 toList()fromList(),将您的类转换为列表或从列表转换。不是用 Jackson 序列化 UserModel 对象,而是序列化列表。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多