Wil*_*arx 3 java jackson jackson-databind jsonnode
使用这些方法时我有点困惑。如果两种方法都返回相同的值,那么为什么 Jackson API 提供了两种不同的方法?
公共双 asDouble()
将尝试将此节点的值转换为 Java 双精度值的方法。使用默认的 Java 规则强制转换数字;布尔值转换为 0.0(假)和 1.0(真),字符串使用默认的 Java 语言整数解析规则进行解析。如果表示不能转换为int(包括Objects和Arrays等结构化类型),则返回默认值0.0;不会抛出任何异常。
公共双双值()
返回此节点的 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());
}
Run Code Online (Sandbox Code Playgroud)
输出:
{"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
Run Code Online (Sandbox Code Playgroud)
正如您在此处看到的,salaryNodevalue 是 String 类型。意味着它不是数字。因此doubleValue()方法返回默认值0.0但amountNode值为数字。因此doubleValue()方法返回其原始值98765.43
| 归档时间: |
|
| 查看次数: |
474 次 |
| 最近记录: |