Джексон: ожидал, что имя поля будет начинаться с двойных кавычек
Простой пример использования Джексона для преобразования строки JSON в Map.
String json = "{name:\"example\"}";
Map map = 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\"}";
Map map = 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 имена полей без кавычек нестандартны, и их следует избегать.