将对象序列化为json,仅限某些字段
问题描述:
我有一个很大的嵌套对象。我想在JSON字符串中序列化这个对象,但是我只需要包含某些字段。这里的问题是这些字段可能会非常频繁地更改,我想以一种可以帮助我轻松包含或排除字段进行序列化的方式来构建它。将对象序列化为json,仅限某些字段
我知道我可以编写很多代码来提取某些字段并“手动”构建JSON。但我想知道是否有其他优雅的方式来达到类似的结果,但指定了必填字段的列表?
例如具有以下的对象结构欲仅包括id
并在响应name
:
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"
}
}
}
]
}
答
使用com.fasterxml.jackson.annotation.JsonIgnore
是实现此目的的另一种方法。
import com.fasterxml.jackson.annotation.JsonIgnore;
class Person {
private String name;
@JsonIgnore
private String surname;
}
当解析器将bean转换为json时,它将忽略surname
。 其他json处理库中将提供类似的注释。
答
如果使用Gson,请学习如何使用ExclusionStrategy & JsonSerializer。
使用这些是一种更灵活的方式来控制序列化,因为它允许决定每个序列化序列化。
如果需要更改要序列化的内容,使用注释稍后需要在字段中添加/删除这些注释。
在你的例子中,后者可能更合适。
这个问题可能是很好的起始点 serialize-java-object-with-gson
听起来不错,我会努力的!如果我将整个私人所有者字段标记为@Expose,它是否也会自动包含所有嵌套字段? –
实际上,如果你想让它们串行化,你必须用'@ Expose'注释标记所有字段。我用另一种方式编辑答案,也读了,也许这更适合你。 – torque203