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;
}
另外可以通过判断第一个非空白字符是否是 [ 的方法来实现:
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);