В соответствии с API-интерфейсом jackson-databind 2.2.0
publi c double asDouble ()
Метод, который попытается преобразовать значение этого узла в Java double. Числа приводятся с использованием правил по умолчанию Java; логические значения преобразуются в 0.0 (false) и 1.0 (true), а строки анализируются с использованием стандартных правил синтаксического анализа Java языка. Если представление не может быть преобразовано в int (включая структурированные типы, такие как Objects и Arrays), будет возвращено значение по умолчанию 0.0; без исключений.
publi c double doubleValue ()
Возвращает 64-битную плавающую точку ( double) значение для этого узла, если и только если этот узел имеет цифру c (isNumber () возвращает true). Для других типов возвращает 0.0. Для целочисленных значений преобразование выполняется с использованием принуждения; это может привести к переполнению со значениями BigInteger.
Пример:
public static void main(String[] args) throws IOException {
String jsonString = "{\"name\":\"Altaf Java\",\"salary\":\"12345.67\",\"amount\":98765.43}";
System.out.println(jsonString);
ObjectMapper objectMapper = new ObjectMapper();
JsonNode rootNode = objectMapper.readTree(jsonString);
JsonNode salaryNode = rootNode.get("salary");
System.out.println("salaryNode.isNumber()=" + salaryNode.isNumber());
System.out.println("salaryNode.asDouble()="+salaryNode.asDouble());
System.out.println("salaryNode.doubleValue()="+salaryNode.doubleValue());
JsonNode amountNode = rootNode.get("amount");
System.out.println("amountNode.isNumber()=" + amountNode.isNumber());
System.out.println("amountNode.asDouble()=" + amountNode.asDouble());
System.out.println("amountNode.doubleValue()=" + amountNode.doubleValue());
}
Выход:
{"name":"Altaf Java","salary":"12345.67","amount":98765.43}
salaryNode.isNumber()=false
salaryNode.asDouble()=12345.67
salaryNode.doubleValue()=0.0
amountNode.isNumber()=true
amountNode.asDouble()=98765.43
amountNode.doubleValue()=98765.43
Как вы можете видеть здесь, salaryNode
значение типа String. Значит это не номер. Следовательно, метод doubleValue()
возвращает значение по умолчанию 0.0
, но значение amountNode
равно Number. Следовательно, doubleValue()
метод возвращает свое первоначальное значение 98765.43