Jackson convert json to generic object example 2016-11-21 07:37
It is easy using Jackson to convert JSON string to Object. In this page I will show you how to convert JSON string to generic object with Jackson. TypeReference is very useful when you convert json string to generic object (like Map, List or other generic object).
convert simple object
User class like following.
public class User {
    private String name;
    private int age;
    //get and set methods
    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
public static void main(String[] args) throws IOException {
    ObjectMapper objectMapper = new ObjectMapper();
    String userJsonStr = "{\"name\": \"Henry\",\"age\": 28}";
    User user = objectMapper.readValue(userJsonStr, User.class);
    System.out.println("json: " + userJsonStr);
    System.out.println(user);
}
output
json: {"name": "Henry","age": 28}
User{name='Henry', age=28}
 
convert generic object
Generic object Box<T> like following.
public class Box<T> {
    private String name;
    private T value;
    //get and set method
    @Override
    public String toString() {
        return "Box{" +
                "name='" + name + '\'' +
                ", value=" + value +
                '}';
    }
}
public static void main(String[] args) throws IOException {
    String boxJsonStr = "{\"name\":\"String box\",\"value\":\"this is string\"}";
    Box stringBox = objectMapper.readValue(boxJsonStr, new TypeReference<Box<String>>() {
    });
    System.out.println("json: " + stringBox);
    System.out.println(stringBox);
}
output
json: Box{name='String box', value=this is string}
Box{name='String box', value=this is string}
 
convert json string to Map
public static void main(String[] args) throws IOException {
    String mapJson = "{\"key1\":\"value1\",\"key2\":\"value2\",\"key3\":\"value3\"}";
    Map<String, String> stringStringMap = objectMapper.readValue(mapJson, new TypeReference<Map<String, String>>() {
    });
    System.out.println("json: " + mapJson);
    System.out.println(stringStringMap);
}
output
json: {"key1":"value1","key2":"value2","key3":"value3"}
{key1=value1, key2=value2, key3=value3}
 
convert json string to nest Map
public static void main(String[] args) throws IOException {
    String nestMapJson = "{\"nestKey1\":{\"key1\":\"value1\",\"key2\":\"value2\",\"key3\":\"value3\"},\"nestKey2\":{\"key1\":\"value1\",\"key2\":\"value2\",\"key3\":\"value3\"},\"nestKey3\":{\"key1\":\"value1\",\"key2\":\"value2\",\"key3\":\"value3\"}}";
    Map<String, Map<String, String>> nestMap = objectMapper.readValue(nestMapJson, new TypeReference<Map<String, Map<String, String>>>() {
    });
    System.out.println("json: " + nestMapJson);
    System.out.println(nestMap);
}
output
json: {"nestKey1":{"key1":"value1","key2":"value2","key3":"value3"},"nestKey2":{"key1":"value1","key2":"value2","key3":"value3"},"nestKey3":{"key1":"value1","key2":"value2","key3":"value3"}}
{nestKey1={key1=value1, key2=value2, key3=value3}, nestKey2={key1=value1, key2=value2, key3=value3}, nestKey3={key1=value1, key2=value2, key3=value3}}