Преобразование строки в целое число с помощью FasterXML Jackson

Я использую два JSON.

Первый имеет идентификатор в виде строки.

"details": {
    "id": "316.0"
}

Другой имеет идентификатор как Integer.

"details": {
    "detailId": 316
}

Оба JSON сопоставляются с FasterXML с двумя разными классами. Я хочу, чтобы оба идентификатора были целыми. На данный момент они String.

Как я могу заставить ForceXML преобразовать «316.0» в Integer, чтобы я мог легко сравнивать оба атрибута?


person Lucas Beier    schedule 17.08.2015    source источник


Ответы (2)


Джексон фактически обрабатывает принуждение, поэтому, если свойство имеет тип int или java.lang.Integer, оно будет анализировать строки JSON, а не просто использовать числа JSON. Обратное также возможно, используя @JsonFormat(shape=Shape.STRING) для числовых полей.

person StaxMan    schedule 18.08.2015

Поскольку у вас не всегда один и тот же формат, лучший способ сделать это — получить его как строку и проанализировать:

int detailId = (int) Float.parseFloat(node.path("details").asText());
person Dici    schedule 17.08.2015
comment
Вам нужно использовать asText(), возможно, есть метод, который возвращает число. - person Peter Lawrey; 18.08.2015
comment
Да есть, но его формат не позволяет, так как у него иногда целые числа, иногда строки. Или я ошибаюсь? Вы, кажется, имеете в виду обратное :) - person Dici; 18.08.2015
comment
Я думаю, что ОП хочет иметь возможность игнорировать ". Я бы использовал метод, который возвращает double, и использовал его. Возможно с некоторым округлением. - person Peter Lawrey; 18.08.2015
comment
Я думал, что синтаксический анализ для "5" завершится ошибкой, потому что это не числовое поле. я попробую это - person Dici; 18.08.2015