5

我只想创建相当于以下内容的杰克逊映射:

{\"isDone\": true}

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

public class Status {

    private boolean isDone;

    public boolean isDone{
        return this.isDone;
    }

    public void setDone(boolean isDone){
        this.isDone = isDone;
    }
}

但是我如何将它实例化,然后将 JSON 写入字符串?

4

2 回答 2

6

您的示例和 Jackson 的问题是 JSON 属性名称的默认选择:Jackson 将看到isDonesetDone选择doneJSON 属性名称。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 }. 请注意,您还可以将字符串写入OutputStreamusing ObjectMapper.writeValue(OutputStream, Object)Writerusing ObjectMapper.writeValue(Writer, Object)

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

使用JsonProperty注释的另一种方法是重命名您的访问器setIsDone/getIsDone。那么注释是不必要的。

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

于 2012-06-19T22:39:32.000 回答
2

对。需要的代码:

ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.writeValueAsString(new Status()));
于 2012-06-19T23:07:25.627 回答