如何判断JsonNode对应的JSON类型与值类型
如何判断JsonNode对应的JSON类型与值类型
嗨,这个问题在处理Jackson的JsonNode时确实挺常见的,我来分享几个实用的方法,帮你快速判断类型~
一、判断是JsonArray还是JsonObject
JsonNode本身提供了直接的判断方法,简单粗暴:
- 调用
isArray()方法:如果返回true,说明这个节点是JsonArray类型 - 调用
isObject()方法:返回true的话就是JsonObject类型
举个代码示例:
// 假设你已经拿到了目标JsonNode实例jsonNode if (jsonNode.isArray()) { // 这里处理JsonArray的逻辑,比如遍历数组元素 for (JsonNode element : jsonNode) { // ... } } else if (jsonNode.isObject()) { // 处理JsonObject的逻辑,比如获取指定字段 JsonNode nameNode = jsonNode.get("name"); }
二、判断具体的值类型(比如int vs decimal)
对于数值、字符串、布尔这类值类型,同样有对应的判断方法,也可以通过节点类型枚举来区分:
方法1:用专门的类型判断方法
JsonNode针对不同数值类型提供了精准的判断方法:
isIntValue():判断是否可以安全转换为int类型(即使底层是BigDecimal,只要值在int范围内也会返回true)isBigDecimal():判断节点本身的数值类型是BigDecimal(对应你说的decimal类型)- 还有
isString()、isBoolean()、isNull()这类方法,覆盖常见的基本类型
代码示例:
if (jsonNode.isNumber()) { // 先确定是数值类型,再细分 if (jsonNode.isIntValue()) { int intVal = jsonNode.asInt(); System.out.println("这是int类型的值:" + intVal); } else if (jsonNode.isBigDecimal()) { BigDecimal decimalVal = jsonNode.decimalValue(); System.out.println("这是decimal类型的值:" + decimalVal); } } else if (jsonNode.isString()) { String strVal = jsonNode.asText(); }
方法2:用getNodeType()获取节点类型枚举
这个方法会返回JsonNodeType枚举值,包含了所有JSON节点类型,适合用switch-case统一处理:
JsonNodeType nodeType = jsonNode.getNodeType(); switch (nodeType) { case ARRAY: // 处理数组 break; case OBJECT: // 处理对象 break; case NUMBER: // 这里再细分数值子类型 if (jsonNode.isIntValue()) { // int逻辑 } break; case STRING: // 字符串逻辑 break; case BOOLEAN: // 布尔值逻辑 break; case NULL: // 空值逻辑 break; default: // 处理其他类型(比如BINARY、MISSING等) break; }
这样就能轻松区分各种JSON节点类型啦~
备注:内容来源于stack exchange,提问作者markvgti
相关产品推荐
相关产品推荐

