Reputation: 417
I'm using Jackson 1.9.2(org.codehaus.jackson) to convent from Java object to matching JSON construct. Here is my java object:
Class ColorLight {
String type;
boolean isOn;
String value;
public String getType(){
return type;
}
public setType(String type) {
this.type = type;
}
public boolean getIsOn(){
return isOn;
}
public setIsOn(boolean isOn) {
this.isOn = isOn;
}
public String getValue(){
return value;
}
public setValue(String value) {
this.value = value;
}
}
If I did the following conversion, I'd get the result I want.
ColorLight light = new ColorLight();
light.setType("red");
light.setIsOn("true");
light.setValue("255");
objectMapper mapper = new ObjectMapper();
jsonString = mapper.writeValueAsString();
jsonString would be like:
{"type":"red","isOn":"true", "value":"255"}
But sometimes I don't have the value of isOn property
ColorLight light = new ColorLight();
light.setType("red");
light.setValue("255");
But the jsonString is still like:
{"type":"red","isOn":"false", "value":"255"}
Where "isOn:false" is default value of Java boolean type which I don't want it be there. How can I remove the isOn property in the final json construct like this?
{"type":"red","value":"255"}
Upvotes: 16
Views: 39496
Reputation: 77186
To skip the value if it's not present:
Boolean
instead of the boolean
primitive (boolean
values are always set to true
or false
).@JsonInclude(Include.NON_NULL)
or @JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
, depending on the version.Upvotes: 11
Reputation: 10853
You can mark your class with the @JsonSerialize(include = JsonSerialize.Inclusion.NON_DEFAULT)
in 1.x annotation that indicates that only properties that have values that differ from default settings (meaning values they have when Bean is constructed with its no-arguments constructor) are to be included.
The @JsonInclude(JsonInclude.Include.NON_DEFAULT)
annotation is used for version 2.x.
Here is an example:
public class JacksonInclusion {
@JsonSerialize(include = JsonSerialize.Inclusion.NON_DEFAULT)
public static class ColorLight {
public String type;
public boolean isOn;
public ColorLight() {
}
public ColorLight(String type, boolean isOn) {
this.type = type;
this.isOn = isOn;
}
}
public static void main(String[] args) throws IOException {
ColorLight light = new ColorLight("value", false);
ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.writeValueAsString(light));
}
}
Output:
{"type":"value"}
Upvotes: 7