是否可以忽略对象但是有一个布尔变量表明杰克逊中存在哪些对象?

时间:2015-04-01 22:57:42

标签: java annotations jackson

我遇到了用Jackson解析JSON对象的问题。

我的对象如下:

{ ... { ... "element" : { ... "user" : {...} } } }

对象"元素"有一个嵌套对象" user"。我不需要解析实际的"用户"对象,但我需要知道它的存在与否。

我已设法使用此代码执行此操作:

// just a dummy User object
@JsonRootName("user")
@JsonIgnoreProperties(ignoreUnknown=true)
public class User {}

@JsonRootName("element")
public class Element {

...

    private boolean isUser;

    public void setUser(User user) {
        isUser = user != null;
    }
}

如果用户对象在JSON中通过Jackson注释不是null,是否可以完全忽略User对象并将isUser变量设置为true?

由于

2 个答案:

答案 0 :(得分:0)

使用@JsonIgnore注释Element内的用户属性,使用@JsonProperty注释setUser方法..查看它是否有效..

答案 1 :(得分:0)

不仅仅是声明,尽管你可以通过以下方式实现:

public class Element {
  public boolean defined;

  public void setUser(Object bogus) {
    defined = (bogus != null);
  }

}

因此,无论JSON值与user匹配,其界限为"自然"键入(Map,List),然后检查完​​成。 如果性能很重要,您还可以编写一个非常简单的JsonDeserializer来检查当前令牌(调用时),调用JsonParser.skipChildren(),然后返回Boolean.TRUEBoolean.FALSE,这样您就可以了可能有类似的东西:

public class Element {
  @JsonProperty("user") // so deserializer called for 'user' property
  @JsonDeserialize(using=MyExistenceCheckingDeserializer.class)
  public boolean defined;

}

电除尘器。如果通常需要这种存在检查。