对象序列化为json,仅限某些字段

时间:2017-10-06 10:43:11

标签: java json serialization

我有一个大的嵌套对象。我想在JSON字符串中序列化此对象,但是我只需要包含某些字段。这里的问题是字段可能会经常更改,我想以一种可以帮助我轻松包含或排除字段序列化的方式构建它。

我知道我可以编写大量代码来提取某些字段并“手动”构建JSON。但我想知道是否有任何其他优雅的方法来实现类似的结果,但指定一个必填字段列表?

例如,我希望以下对象结构包含响应中的idname

class Building {
    private List<Flat> flats;
}

class Flat {
    private Integer id;     
    private Person owner;
}


class Person {
    private String name;
    private String surname;
}

JSON:

{
    "flats" : [
        {
            "flat":
            {
                "id" : "1",
                "person" : {
                    "name" : "John"
                }
            }
        }
    ]
}

3 个答案:

答案 0 :(得分:1)

您可以使用gson来序列化/反序列化JSON。 然后,您可以包含@Expose注释,以仅使用您需要的字段。

请务必将Gson对象配置为仅序列化“公开”字段。

Gson gson = GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();

<强>替代:

您实际上可以采用相反的方式,标记不会暴露的字段。您可以使用transient关键字执行此操作。 所以无论你想忽略什么,只需添加transient即可。以下是它在gson上的工作原理。

PS:这也适用于大多数Java JSON序列化程序。

答案 1 :(得分:0)

使用com.fasterxml.jackson.annotation.JsonIgnore是另一种实现此目的的方法。

import com.fasterxml.jackson.annotation.JsonIgnore;

class Person {
    private String name;
    @JsonIgnore
    private String surname;
}

当解析器将bean转换为json时,它将忽略surname。 其他json处理库中也可以使用类似的注释。

答案 2 :(得分:0)

如果使用Gson,请研究如何使用ExclusionStrategy&amp; JsonSerializer。

使用它们是一种更灵活的方法来控制序列化,因为它允许决定每个序列化序列化的内容。

如果需要更改要序列化的内容,使用注释需要稍后在字段中添加/删除这些注释。

对于你的例子,后者可能更合适。

这个问题可能是一个很好的起点 serialize-java-object-with-gson