Today, I would like to share an easy way to parse a JSON string into a List of Java objects in a few lines of code. Imagine the situation where you need to create a List of complex objects from a JSON array in Java, for example if we have this kind of input:
[ { "title":"Title of hotspot #1", "x":194, "y":180, "order":0, "url":"http://www.alex-arriaga.com/" }, { "title":"Title of hotspot #2", "x":23, "y":45, "order":1, "url":"http://www.alex-arriaga.com/about-me/" } ]
Now, suppose we have following POJO class (this class will have our fields for doing the mapping from JSON to a Java List):
package com.base22.model; public class HotSpot{ private String title; private int x; private int y; private int order; private String url; public HotSpot(){ } // Create more constructors if you want :) public int getTitle() { return title; } public void setTitle(String title) { this.title = title; } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } public int getOrder() { return order; } public void setOrder(int order) { this.order = order; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } @Override public String toString(){ StringBuilder sb = new StringBuilder(); sb.append("\nHotspot [ID=" + id + "]"); sb.append("\nUrl: " + url); sb.append("\nDescription: " + description); sb.append("\nOrder: " + order); return sb.toString(); } }
One of the easiest way to reach our goal is by using Jackson library (http://jackson.codehaus.org/), which has a really good mapper. Let me show two single lines to map our JSON input into a Java List.
// This is an example of a JSON input string String jsonString = "[{\"title\":\"Title of hotspot #1\",\"x\":194,\"y\":180,\"order\":0,\"url\":\"http://www.alex-arriaga.com/\"},{\"title\":\"Title of hotspot #2\",\"x\":23,\"y\":45,\"order\":1,\"url\":\"http://www.alex-arriaga.com/about-me/\"}]";
try{ ObjectMapper jsonMapper = new ObjectMapper(); List <HotSpot> hotspots = jsonMapper.readValue(jsonString, new TypeReference<List<HotSpot>>(){}); }catch(Exception e){ e.printStackTrace(); }
Finally, you could iterate among all the objects in your new List.
for(HotSpot hotspot : hotspots){ System.out.println(hotspot); }
That’s it!
Be happy with your code!