首页  编辑  

兼容处理API返回数组或者Map对象的情况

Tags: /Java/   Date Created:
Java中,某个API 返回的数据,可能是 [] 数组,也可能是 {} Map对象,那么在使用 JSON.parseObject()的时候,如果是 [] 数组,则会报错,有什么简单优雅的方法能兼容处理这两种情况?

一个方法是使用 ObjectMapper,通过 node.isArray 判断是否是 [] 对象还是普通的Map对象:
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;

    ObjectMapper objectMapper = new ObjectMapper();
    try {
      JsonNode root = objectMapper.readTree(jsonString);
      if (root.isArray()) {
        List<DemoItem> list = JSON.parseArray(jsonString, DemoItem.class);
      }

      JSON.parseObject(jsonString, Demo.class);
    } catch (Exception e) {
      throw e;
    }
另外可以通过判断第一个非空白字符是否是 [ 的方法来实现:
    /**
     * 获取字符串中第一个非空白字符
     * 
     * @param str 输入字符串
     * @return 第一个非空白字符。如果字符串全为空白或为空,返回 '\0'。
     */
    public static char firstNonWhitespaceChar(String str) {
        if (str == null || str.isEmpty()) {
            return '\0'; // 返回空字符,表示无效输入
        }

        int length = str.length();
        for (int i = 0; i < length; i++) {
            char c = str.charAt(i);
            if (!Character.isWhitespace(c)) {
                return c;
            }
        }

        return '\0'; // 如果全是空白字符,返回空字符
    }

    if ('[' = firstNonWhitespaceChar(jsonString)) {
        List<DemoItem> list = JSON.parseArray(jsonString, DemoItem.class);
    }

    JSON.parseObject(jsonString, Demo.class);