In Jackson, we can use mapper.readValue(json, Map.class) to convert a JSON string to a Map
P.S Tested with Jackson 2.9.8
pom.xml
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.8</version> </dependency>
1. JSON string to Map
JacksonMapExample1.java
package com.favtuts.json;
import java.io.IOException;
import java.util.Map;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonMapExamples {
public static void main(String[] args) {
convertJSONstringToMap();
}
static void convertJSONstringToMap() {
ObjectMapper mapper = new ObjectMapper();
String json = "{\"name\":\"favtuts\", \"age\":\"37\"}";
try {
// convert JSON string to Map
Map<String, String> map = mapper.readValue(json, Map.class);
// it works
// Map<String, String> map = mapper.readValue(json, new
// TypeReference<Map<String, String>>() {});
System.out.println(map);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Output
{name=favtuts, age=37}
2. Map to JSON string
JacksonMapExample2.java
package com.favtuts.json;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonMapExamples {
public static void main(String[] args) {
convertMapToJSONstring();
}
static void convertMapToJSONstring() {
ObjectMapper mapper = new ObjectMapper();
Map<String, String> map = new HashMap<>();
map.put("name", "favtuts");
map.put("age", "37");
try {
// convert map to JSON string
String json = mapper.writeValueAsString(map);
System.out.println(json); // compact-print
json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(map);
System.out.println(json); // pretty-print
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
}
Output
{"name":"favtuts","age":"37"}
{
"name" : "favtuts",
"age" : "37"
}
3. JSON Array to Map?
3.1 JSON array string like this
[{"age":29,"name":"favtuts"}, {"age":30,"name":"fong"}]
It should convert to a List, instead of a Map, for example :
// convert JSON array to List
List<Person> list = Arrays.asList(mapper.readValue(json, Person[].class));
Note
Download Source Code
$ git clone https://github.com/favtuts/java-core-tutorials-examples
$ cd java-basic/json