package com.levelup.java.json;
import static org.hamcrest.CoreMatchers.hasItems;
import static org.junit.Assert.assertThat;
import java.io.IOException;
import org.apache.log4j.Logger;
import org.junit.Test;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.guava.GuavaModule;
import com.google.common.collect.Multimap;
/**
* This java example will demonstrate how to convert
* json string to guava multimap.
*
* @author Justin Musgrove
* @see <a href='http://www.leveluplunch.com/java/examples/convert-json-to-guava-multimap-with-jackson/'>Json to guava multimap</a>
*/
public class JsonToGuavaMultimap {
private static final Logger logger = Logger
.getLogger(JsontoJavaObject.class);
String jsonString = "{\n \"123455\":[\n {\n \"key\":\"Java Exercises\",\n \"url\":\"www.leveluplunch.com/java/exercises/\"\n },\n {\n \"key\":\"Java Examples\",\n \"url\":\"www.leveluplunch.com/java/examples/\"\n }\n ],\n \"999999\":[\n {\n \"key\":\"Java Tutorials\",\n \"url\":\"www.leveluplunch.com/java/tutorials/\"\n },\n {\n \"key\":\"Java Examples\",\n \"url\":\"www.leveluplunch.com/java/examples/\"\n }\n ]\n}";
static class NavItem {
public NavItem() {
}
private String key;
private String url;
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
@Override
public String toString() {
return com.google.common.base.Objects.toStringHelper(this)
.add("key", key).add("url", url).toString();
}
}
@Test
public void convert() throws JsonParseException, JsonMappingException,
JsonProcessingException, IOException {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new GuavaModule());
Multimap<String, NavItem> navs = objectMapper.readValue(
objectMapper.treeAsTokens(objectMapper.readTree(jsonString)),
objectMapper.getTypeFactory().constructMapLikeType(
Multimap.class, String.class, NavItem.class));
logger.info(navs);
assertThat(navs.keys(), hasItems("123455", "999999"));
}
}