使用 jackson 创建简单的 JSON 结构



我只想创建以下杰克逊映射等效项:

{"isDone": true}

我想我需要创建一个这样的类:

public class Status {
    private boolean isDone;
    public boolean isDone{
        return this.isDone;
    }
    public void setDone(boolean isDone){
        this.isDone = isDone;
    }
}

但是我如何设置它,然后将 JSON 写入字符串?

您的示例和杰克逊的一个问题是 JSON 属性名称的默认选择:杰克逊将看到isDonesetDone,并选择done作为 JSON 属性名称。您可以使用JsonProperty注释覆盖此默认选项:

public class Status
{
    private boolean isDone;
    @JsonProperty("isDone")
    public boolean isDone()
    {
        return this.isDone;
    }
    @JsonProperty("isDone")
    public void setDone(boolean isDone)
    {
        this.isDone = isDone;
    }
}

然后:

Status instance = new Status();
String jsonString = null;
instance.setDone(true);
ObjectMapper mapper = new ObjectMapper();
jsonString = mapper.writeValueAsString(instance);

现在jsonString包含{ "isDone" : true } .请注意,您还可以使用 ObjectMapper.writeValue(OutputStream, Object) 将字符串写入OutputStream,或使用 ObjectMapper.writeValue(Writer, Object) 写入Writer

在这种情况下,您实际上只需要其中一个访问器上的JsonProperty注释,而不是两个。只需批注isDone即可获得所需的 JSON 属性名称。

使用 JsonProperty 注释的替代方法是将访问器重命名为 setIsDone/getIsDone 。那么注释是不必要的。

请参阅快速而肮脏的杰克逊教程:5 分钟内的杰克逊。对特定属性的理解来自于查看杰克逊注释的文档。

对。所需的代码:

ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.writeValueAsString(new Status()));

最新更新