Я использую библиотеку Джексона для сериализации / десериализации в / из JSON. Мне нужно, чтобы этот JSON имел наименьший возможный размер, поэтому я включил функцию ALLOW_UNQUOTED_FIELD_NAMES, чтобы исключить все кавычки. Я знаю, что удаление кавычек не является стандартным json, но сделать json small - сложное требование проекта. Сгенерированный json работает, но когда я пытаюсь прочитать значение json, я получаю исключение:
org.codehaus.jackson.JsonParseException:
Неожиданный символ («9» (код 57)):
ожидал любое действительное имя
символ (для имени без кавычек) или
двойная кавычка (для цитирования) для начала
имя поля в [Источник:
java.io.StringReader@1347d75; строка 1,
колонка: 3]
Когда я читаю этот json, возникает исключение выше:
{90110a2e-febd-470f-afa4-cf7e890d31b9:0,eec652ad-a4d9-4eb1-8d24-7c1a0c29449f:1}
Я прочитал так:
Map<String, Object> valuesMap = oM.readValue(json, new TypeReference<Map<String, Object>>() {});
и средство отображения объектов, которое я использую как для чтения, так и для записи значений:
private static final ObjectMapper om = new ObjectMapper();
static {
om.configure(JsonGenerator.Feature.QUOTE_FIELD_NAMES, false);
om.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
om.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, true);
om.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
om.getSerializationConfig().setSerializationInclusion(JsonSerialize.Inclusion.NON_NULL);
}
Я использую версию 1.6.3 Джексона как в проектах отправителя, так и в получателе. Необходимая версия для этой функции - 1.2+, поэтому я подумал, что, возможно, я не использовал эту версию, но мой приемник - приложение Spring, и я проверил, что библиотека, установленная в папке libs, - 1.6.3.
Что я могу делать не так? Возможно, эту функцию нельзя использовать с картами.
У меня есть еще один вопрос. Пока я просто отправляю карту, где ключом является просто значение uuid, а значением является число. Могу ли я иметь какие-либо проблемы, если я отправлю значение со специальными символами с включенной функцией ALLOW_UNQUOTED_FIELD_NAMES? Джексон сбежит от этих персонажей?
Спасибо.