使用jackson创建简单的JSON结构

时间:2012-06-19 22:33:13

标签: java json jackson

我想创建与以下相同的杰克逊映射:

{\"isDone\": true}

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

public class Status {

    private boolean isDone;

    public boolean isDone{
        return this.isDone;
    }

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

但是如何实现它然后将JSON写入字符串?

2 个答案:

答案 0 :(得分:6)

您的示例和Jackson的问题是JSON属性名称的默认选择:Jackson将看到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。然后注释是不必要的。

请参阅快速而肮脏的Jackson教程:Jackson in 5 minutes。通过查看杰克逊注释的文档来了解特定属性。

答案 1 :(得分:2)

右。所需的代码:

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