How to convert a JSON string to a Map<String, String> with Jackson JSON
[Update Sept 2020] Although my original answer here, from many years ago, seems to be helpful and is still getting upvotes, I now use the GSON library from Google, which I find to be more intuitive.
I've got the following code:
public void testJackson() throws IOException { ObjectMapper mapper = new ObjectMapper(); File from = new File("albumnList.txt"); TypeReference<HashMap<String,Object>> typeRef = new TypeReference<HashMap<String,Object>>() {}; HashMap<String,Object> o = mapper.readValue(from, typeRef); System.out.println("Got " + o); }
It's reading from a file, but mapper.readValue()
will also accept an InputStream
and you can obtain an InputStream
from a string by using the following:
new ByteArrayInputStream(astring.getBytes("UTF-8"));
There's a bit more explanation about the mapper on my blog.
Try TypeFactory
. Here's the code for Jackson JSON (2.8.4).
Map<String, String> result;ObjectMapper mapper;TypeFactory factory;MapType type;factory = TypeFactory.defaultInstance();type = factory.constructMapType(HashMap.class, String.class, String.class);mapper = new ObjectMapper();result = mapper.readValue(data, type);
Here's the code for an older version of Jackson JSON.
Map<String, String> result = new ObjectMapper().readValue( data, TypeFactory.mapType(HashMap.class, String.class, String.class));
Warning you get is done by compiler, not by library (or utility method).
Simplest way using Jackson directly would be:
HashMap<String,Object> props;// src is a File, InputStream, String or suchprops = new ObjectMapper().readValue(src, new TypeReference<HashMap<String,Object>>() {});// or:props = (HashMap<String,Object>) new ObjectMapper().readValue(src, HashMap.class);// or even just:@SuppressWarnings("unchecked") // suppresses typed/untype mismatch warnings, which is harmlessprops = new ObjectMapper().readValue(src, HashMap.class);
Utility method you call probably just does something similar to this.