【问题标题】:What is the difference between asDouble() and doubleValue() in Jackson API?Jackson API 中的 asDouble() 和 doubleValue() 有什么区别?
【发布时间】:2020-05-31 08:54:30
【问题描述】:

我在使用这些方法时有点困惑。如果两种方法都返回相同的值,那为什么 Jackson API 提供了两种不同的方法?

【问题讨论】:

  • 也许您应该阅读文档,即两种方法的 javadoc,因为它解释了每种方法的工作原理。
  • 谢谢,下次我会注意的。

标签: java jackson jackson-databind jsonnode


【解决方案1】:

根据jackson-databind 2.2.0 API

public double asDouble()

尝试将此节点的值转换为 Java 双精度值的方法。数字是使用默认的 Java 规则强制转换的;布尔值转换为 0.0 (false) 和 1.0 (true),字符串使用默认的 Java 语言整数解析规则进行解析。 如果表示不能转换为 int(包括 Objects 和 Arrays 等结构化类型),则返回默认值 0.0;不会抛出异常。

public double doubleValue()

返回此节点的 64 位浮点 (double) 值,当且仅当此节点为数字时(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 值是字符串类型。表示它不是数字。因此doubleValue() 方法返回默认值0.0 但amountNode 值是数字。因此doubleValue() 方法返回其原始值98765.43

【讨论】:

    猜你喜欢
    • 2016-12-06
    • 1970-01-01
    • 2012-03-18
    • 2015-12-08
    • 2017-12-05
    • 1970-01-01
    • 2017-03-04
    • 2014-10-05
    • 1970-01-01
    相关资源
    最近更新 更多