我有一个大的嵌套对象。我想在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"
}
}
}
]
}
答案 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