Джексон: ожидал, что имя поля будет начинаться с двойных кавычек
Простой пример использования Джексона для преобразования строки JSON в Map.
String json = "{name:\"example\"}"; Mapmap = new HashMap (); ObjectMapper mapper = new ObjectMapper(); map = mapper.readValue(json, new TypeReference >(){});
проблема
Когда программа выполняется, появляется следующее сообщение об ошибке
org.codehaus.jackson.JsonParseException: Unexpected character ('n' (code 110)): was expecting double-quote to start field name at [Source: java.io.StringReader@7c87c24a; line: 1, column: 3]
Решение
В спецификации JSON требуется использовать двойные кавычки для имен полей. Чтобы позволить Джексону обрабатывать имя поля без кавычек, добавьтеJsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES
в конфигурациюObjectMapper
.
package com.example.jsonexample; import java.io.IOException; import java.util.HashMap; import java.util.Map; import org.codehaus.jackson.JsonParseException; import org.codehaus.jackson.JsonParser; import org.codehaus.jackson.map.JsonMappingException; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.type.TypeReference; public class JsonMapExample { public static void main(String[] args) { String json = "{name:\"example\"}"; Mapmap = new HashMap (); ObjectMapper mapper = new ObjectMapper(); mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true); try { map = mapper.readValue(json, new TypeReference >(){}); System.out.println(map); } catch (JsonParseException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
Выход
{name=example}
Note
В JSON имена полей без кавычек нестандартны, и их следует избегать.