Jackson provides an efficient way to bind JSON to POJOs. However, at times, certain properties may need to be ignored while converting a JSON to Java Object or Java Object to JSON. Jackson provides three ways to Ignore fields in JSON.
- @JsonIgnoreProperties– This annotation can be used at the type level to ignore json properties. In the example below, we ignore the ‘tags’ property from the albums dataset.
- @JsonIgnore – This annotation can be set at the property level to ignore certain properties.
- Using Custom filters
The example below shows method 1 and 2. Also, note the use of the @JsonAutoDetect annotation.
Example for how to Ignore fields in JSON using Jackson
Databinding
package com.studytrails.json.jackson; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.ObjectMapper; public class DataBindingFilter { public static void main(String[] args) throws JsonParseException, JsonMappingException, MalformedURLException, IOException { String url = "http://freemusicarchive.org/api/get/albums.json?api_key=60BLHNQCAOUFPIBZ&limit=2"; ObjectMapper mapper = new ObjectMapper(); mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); AlbumsFilter albums = mapper.readValue(new URL(url), AlbumsFilter.class); System.out.println(albums.getTotal_pages()); System.out.println(albums.getTitle()); for (DatasetFilter dataset : albums.getDatasetFilter()) { System.out.println(dataset.getAlbum_comments()); System.out.println(dataset.get("album_images")); System.out.println(dataset.get("tags")); System.out.println(dataset.get("album_listens")); break; } } }
The AlbumsFilter class
package com.studytrails.json.jackson; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; import com.fasterxml.jackson.annotation.JsonProperty; // Do not use fields to autodetect. use the public getter methods to autodetect properties @JsonAutoDetect(fieldVisibility = Visibility.NONE, getterVisibility = Visibility.PUBLIC_ONLY) public class AlbumsFilter { private String title; private DatasetFilter[] datasetFilter; public String total_pages; protected String getTotal_pages() { return total_pages; } public String getTitle() { return title; } // this getter method is for the 'dataset' property @JsonProperty("dataset") public DatasetFilter[] getDatasetFilter() { return datasetFilter; } }
DatasetFilter class
package com.studytrails.json.jackson; import java.util.HashMap; import java.util.Map; import com.fasterxml.jackson.annotation.JsonAnyGetter; import com.fasterxml.jackson.annotation.JsonAnySetter; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; // ignore the property with name 'tags'. @JsonIgnoreProperties({ "tags" }) public class DatasetFilter { private String album_id; private String album_title; private Map<String , Object> otherProperties = new HashMap<String , Object>(); private String album_comments; @JsonCreator public DatasetFilter(@JsonProperty("album_id") String album_id, @JsonProperty("album_title") String album_title) { this.album_id = album_id; this.album_title = album_title; } // ignore the property specified by this getter. @JsonIgnore public String getAlbum_comments() { return album_comments; } public String getAlbum_id() { return album_id; } public void setAlbum_id(String album_id) { this.album_id = album_id; } public String getAlbum_title() { return album_title; } public void setAlbum_title(String album_title) { this.album_title = album_title; } public Object get(String name) { return otherProperties.get(name); } // this method is used to get all properties not specified earlier. @JsonAnyGetter public Map<String , Object> any() { return otherProperties; } @JsonAnySetter public void set(String name, Object value) { otherProperties.put(name, value); } }
What about method 3 (Custom filters)?
http://freemusicarchive.org/api/get/albums.json?api_key=60BLHNQCAOUFPIBZ&limit=2
this url report an error
{“title”:”Free Music Archive – Albums”,”message”:””,”errors”:[“invalid or disabled api_key”],”http_status”:403,”dataset”:[]}
You will need to use your own API key.