Десериализовать свойство JSON в строковый/числовой/логический тип с помощью ДжексонаJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Десериализовать свойство JSON в строковый/числовой/логический тип с помощью Джексона

Сообщение Anonymous »

Учитывая этот JSON

Код: Выделить всё

{
"rejectedValue": "rejected"
}
Я пытаюсь использовать Джексона для десериализации этого в экземпляр

Код: Выделить всё

public record MyClass(Object rejectedValue) {
}
(На самом деле записи JSON и Java имеют и другие свойства, но я их опустил, поскольку они не имеют отношения к вопросу)
Свойство JSON отклонено всегда будет одним из следующих:
  • строка
  • число
    />
  • boolean
  • null
Поэтому, если свойство JSON не равно нулю, тип времени выполнения соответствующего свойства объекта Java должен быть одним из
  • String
  • Подкласс Number (Integer, Double, и т.д.)
  • Boolean
Моя попытка написать десериализатор Джексона приведена ниже. Я использую кандидатскую версию Jackson, а именно v3.0.0-rc9.

Код: Выделить всё

import tools.jackson.databind.ValueDeserializer;
import tools.jackson.databind.JsonNode;

public class MyClassDeserializer extends ValueDeserializer {

@Override
public MyClass deserialize(JsonParser parser, DeserializationContext ctx) throws JacksonException {
JsonNode jsonRoot = parser.readValueAsTree();
JsonNode rejectedValue = jsonRoot.get("rejectedValue");
Object convertedValue = toSimpleValue(rejectedValue);
return new MyClass(convertedValue);
}

private Object toSimpleValue(JsonNode node) {
return switch (node.getNodeType()) {
case NULL, MISSING -> null;
case BOOLEAN -> node.asBoolean();
case NUMBER -> node.isInt() ? node.asInt() : node.isLong() ? node.asLong() : node.asDouble();
default -> node.asString();
};
}
}
Хотя это работает, код довольно неприятен. Я подозреваю, что должен быть более лаконичный/элегантный способ добиться того же результата?


Подробнее здесь: https://stackoverflow.com/questions/797 ... th-jackson
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»