如何用JSONSimple库判断API返回的JSON数组是否为空?
解决JSONSimple中判断JSON数组是否为空、获取长度的问题
嘿,我来帮你搞定这个JSONSimple的使用问题!你遇到的错误大概率是因为从JSONObject里取出的字段没有正确转换为JSONArray类型,或者没做类型校验导致的。下面给你一步步讲正确的实现方式:
核心思路
从JSONObject中获取数组字段时,返回的是Object类型,必须先校验它的类型是否为JSONArray,再强制转换,之后就能用size()方法获取长度、判断是否为空了。
完整代码示例
import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; public class JsonArrayDemo { public static void main(String[] args) throws ParseException { // 模拟你获取到的JSONObject String jsonStr = "{\"order\":[]}"; JSONParser parser = new JSONParser(); JSONObject jsonObj = (JSONObject) parser.parse(jsonStr); // 第一步:先检查字段是否存在 if (jsonObj.containsKey("order")) { Object orderField = jsonObj.get("order"); // 第二步:校验字段类型是否为JSONArray if (orderField instanceof JSONArray) { JSONArray orderArray = (JSONArray) orderField; int arrayLength = orderArray.size(); // 判断数组是否为空并输出结果 if (arrayLength == 0) { System.out.println("order数组是空的"); } else { System.out.println("order数组的长度是:" + arrayLength); } } else { // 处理字段类型不符的情况 System.err.println("注意:order字段不是一个JSON数组"); } } else { // 处理字段不存在的情况 System.err.println("JSON中没有找到order字段"); } } }
为什么之前会出错?
很多人容易犯的错误是直接把jsonObj.get("order")强制转成JSONArray,却没做类型判断——如果这个字段不存在(返回null),或者实际类型不是数组(比如是字符串、数字),就会抛出ClassCastException或者NullPointerException。上面的代码通过两步校验(字段存在性、类型正确性),就能避免这类错误。
额外提示
如果你的业务场景中,order字段可能被错误地设置为null(比如{"order":null}),那还需要在类型判断前加上null校验:
if (orderField != null && orderField instanceof JSONArray) { // 后续逻辑 }
内容的提问来源于stack exchange,提问作者Tim Willis
相关产品推荐
相关产品推荐

