关于Jackson中JsonNode的取值asText()和textValue()区别
在 比较高版本的Jackson 中, 包名为 com.fasterxml.jackson
1 String jsonText="{\"name\":\"张三\","age":16,\"other\":\"312312.22\"}" 2 // JsonTools.text2Node() 为自己工具类请无视 3 JsonNode node = JsonTools.text2Node(jsonText); 4 // 一般我们需要从node中取值 5 node.get("name"); 6 node.get("name").asText(); 7 node.get("name").asText("默认值"); 8 node.get("name").textValue(); 9 10 // 结果依次是 11 // "张三" 12 // 张三 13 // 张三 14 // 张三 15 16 node.get("age").asText(); // 结果为: 16 17 node.get("age").textValue(); // 结果为: null 18 19 // 关于asText()和textValue()的区别
上面很清楚的可以看到:
- 如果 字段本身的值为 text 类型 的, 那么用 asText() 和 textValue() 获取的结果是一致的;
- 如果 字段本身的值不是 text 类型的, 比如上面的 age 应该是数字类型的, 那么 asText() 会将最后的结果 16 转换为text 然后返回, 而 textValue() 则取不到值会返回空null, 此时需要用 intValue() /longValue()/数值类型的取值方法才能取到值;
- 同理 如果字段本身不是 int 整数型, 那么asInt() 会将获取的结果尝试转化为 int 然后返回, 而 intValue() 会返回空null;
4. 关于其他类型的获取值,同理: 如 longValue() 和 asLong() , asDouble() 和doubleValue();
需要补充一点, 如果字段在node中不存在, 则会报错空指针, 因为 他会是先获取,然后将结果转换为text 但是 在前面一步 get("")的结果已经为空;
差异在于, 没有值的 字段, 起码key 是有的,此时会处理value
一介书生,敲敲键盘而已。