使用Jackson嵌套Json到Map

我正在尝试动态地将一些JSON解析为Map。 以下适用于简单的JSON

String easyString = "{\"name\":\"mkyong\", \"age\":\"29\"}"; Map map = new HashMap(); ObjectMapper mapper = new ObjectMapper(); map = mapper.readValue(easyString, new TypeReference<HashMap>(){}); System.out.println(map); 

但是当我尝试将一些更复杂的JSON与嵌套信息一起使用时失败了。 我正在尝试解析json.org中的示例数据

 { "glossary": { "title": "example glossary", "GlossDiv": { "title": "S", "GlossList": { "GlossEntry": { "ID": "SGML", "SortAs": "SGML", "GlossTerm": "Standard Generalized Markup Language", "Acronym": "SGML", "Abbrev": "ISO 8879:1986", "GlossDef": { "para": "A meta-markup language, used to create markup languages such as DocBook.", "GlossSeeAlso": [ "GML", "XML" ] }, "GlossSee": "markup" } } } } } 

我收到以下错误

线程“main”中的exceptioncom.fasterxml.jackson.databind.JsonMappingException:无法从START_OBJECT标记中反序列化java.lang.String的实例

有没有办法将复杂的JSON数据解析成地图?

我认为错误的发生是因为jackson遇到{字符时,它将剩余内容视为新对象,而不是字符串。 尝试将Object作为映射值而不是String。

 public static void main(String[] args) throws IOException { Map map = new HashMap(); ObjectMapper mapper = new ObjectMapper(); map = mapper.readValue(x, new TypeReference(){}); System.out.println(map); } 

产量

 {glossary={title=example glossary, GlossDiv={title=S, GlossList={GlossEntry={ID=SGML, SortAs=SGML, GlossTerm=Standard Generalized Markup Language, Acronym=SGML, Abbrev=ISO 8879:1986, GlossDef={para=A meta-markup language, used to create markup languages such as DocBook., GlossSeeAlso=[GML, XML]}, GlossSee=markup}}}}} 

将Map作为容器包装到一个哑对象中,如下所示:

 public class Country { private final Map>> citiesAndCounties=new HashMap<>; // Generate getters and setters and see the magic happen. } 

其余的只是使用您的Object映射器,使用Joda模块的示例Object mapper:

 public static final ObjectMapper JSON_MAPPER=new ObjectMapper(). disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES). setSerializationInclusion(JsonInclude.Include.NON_NULL). disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS). registerModule(new JodaModule()); // Calling your Object mapper JSON_MAPPER.writeValueAsString(new Country()); 

希望有所帮助;-)