我有一个json节点,我想检查它是否是一个数组。如果节点是数组,则每个值都应该是一个短值。因此,对于每个值,我正在使用isNumber(( API检查它是否是一个数字。但是我想知道这个数字是否是短的。怎么做?法典:
JsonNode attrNode = rootNode.path("product_id_anyof");
if ((attrNode.getNodeType() == JsonNodeType.ARRAY) { ///this part is working.
for (final JsonNode node : attrNode) {
if (!node.isShort()) { ///returns false even if the number is a short.
return false;
else
return true;
}
}
}
预期:如果给定 short,它应该返回 true,但它总是给出 false。
JSON
number
默认读取为int
,尝试检查给定number
值是否手动short
:
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.JsonNodeType;
public class Test {
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
System.out.println(onlyShortsArray(mapper.readTree("[1,2,3,4]")));
System.out.println(onlyShortsArray(mapper.readTree("[1,2,3, 33333]")));
System.out.println(onlyShortsArray(mapper.readTree("[1,2,3, "a"]")));
}
private static boolean onlyShortsArray(JsonNode attrNode) {
if (attrNode.getNodeType() == JsonNodeType.ARRAY) {
for (final JsonNode node : attrNode) {
if (node.isInt()) {
try {
Short.valueOf(node.asText());
continue;
} catch (NumberFormatException e) {
return false;
}
}
return false;
}
return true;
}
return false;
}
}