Jackson library is a popular library to map Java objects to JSON and vice-versa and has a better parsing speed as compared to other popular parsing libraries like GSON, JSONP etc. This blog post gives a basic explanation on how we utilised the Jackson library in the Open Event Android App.
To use the Jackson library we need to add the dependency for it in the app/build.gradle file.
compile 'com.squareup.retrofit2:converter-jackson:2.2.0'
After updating the app/build.gradle file with the code above we were able to use Jackson library in our project.
Example of Jackson Library JSON Parsing
To explain how the mapping is done let us take an example. The file given below is the sponsors.json file from the android app.
[ “description”: “”, “id”: 1, “level”: 3, “name”: KI Group, “type”: Gold, “url: “”, “logo-url”: “” ]
The sponsors.json consists of mainly 7 attributes namely description, id, level, name, type, url and logo url for describing one sponsor of the event. The Sponsors.java file for converting the json response to Java POJO objects was done as follows utilizing the Jackson library:
public class Sponsors extends RealmObject { @JsonProperty(“id”) private int id; @JsonProperty(“type”) private String type; @JsonProperty(“description”) private String description; @JsonProperty(“level”) private String level; @JsonProperty(“name”) private String name; @JsonProperty(“url”) private String url; @JsonProperty(“logo-url”) private String logoUrl; }
As we can see from the above code snippet, the JSON response is converted to Java POJO objects simply by using the annotation “@JsonProperty(“”)” which does the work for us.
Another example which makes this library amazing are the setter and getter annotations which help us use a single variable for two different json attributes if need be. We faced this situation when we were moving from the old api to the new json api. In that case we wanted support for both, old and new json attributes. In that case we simply used the following code snippet which made our transition to new api easier.
public class Sponsors extends RealmObject { private int id; private String type; private String description; private String level; private String name; private String url; private String logoUrl; @JsonSetter(“logo”) public void setLogo(String logoUrl) { this.logoUrl = logoUrl; } @JsonSetter(“logo-url”) public void setLogo(String logoUrl) { this.logoUrl = logoUrl; } }
As we can see the setter annotations allow easy naming of variable to multiple attributes if need be thus making the code easily adaptable with less overload.
Related Links:
- This link explains the json parsing with Jackson library. (https://stackoverflow.com/questions/19490017/json-parsing-using-jackson-library)
- This tutorial explains the features of the Jackson library. (https://www.tutorialspoint.com/jackson/index.htm)