如何检查JSON节点是否短

问题描述 投票:0回答:1

我有一个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但它总是给出错误。

java json jackson short fasterxml
1个回答
0
投票

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;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.