Deserialize json свойства в тип струны/числовой/логический тип с ДжексономJAVA

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

Сообщение Anonymous »

Учитывая этот json < /p>

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

{
"rejectedValue": "rejected"
}
< /code>
Я пытаюсь использовать Джексон, чтобы десериализировать это в экземпляре < /p>
public record MyClass(Object rejectedValue) {
}
(в действительности, у записи JSON и Java есть другие свойства, но я их пропустил, потому что они не имеют отношения к вопросу) /> boolean < /li>
null < /li>
< /ul>
Так что, если свойство JSON не является нулевым типом времени выполнения соответствующего объекта Java, должно быть одним из < /p>

string < /li>
(intreger, double, in-double, in-double, ncure, number> < /p>

. и т. Д.) Я использую версию кандидата в релиз Джексона, в частности, v3.0.0.0-rc9. < /P>
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();
};
}
}
< /code>
Хотя это работает, код довольно неприятен. Я подозреваю, что должен быть более краткий/элегантный способ достичь того же результата?


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

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

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

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

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

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