使用FastJSON判断JSON字符串是数组还是对象,可以通过以下步骤实现:
方法1:解析后检查类型
- 解析JSON字符串:使用
JSON.parse()
将字符串解析为Object。 - 类型判断:检查解析后的对象是否为
JSONArray
或JSONObject
实例。
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;public class JsonTypeChecker {public static void main(String[] args) {String jsonStr = "{\"key\":\"value\"}"; // 示例JSON字符串try {Object parsed = JSON.parse(jsonStr);if (parsed instanceof JSONArray) {System.out.println("JSON字符串是数组");} else if (parsed instanceof JSONObject) {System.out.println("JSON字符串是对象");} else {System.out.println("既不是数组也不是对象(可能是基本类型)");}} catch (Exception e) {System.out.println("无效的JSON字符串");}}
}
方法2:检查字符串起始字符(快速初步判断)
如果仅需快速判断结构而不验证内容正确性,可以检查字符串起始字符:
public static String checkJsonTypeQuickly(String jsonStr) {String trimmed = jsonStr.trim();if (trimmed.isEmpty()) {return "空字符串";}char firstChar = trimmed.charAt(0);if (firstChar == '[') {return "可能是数组";} else if (firstChar == '{') {return "可能是对象";} else {return "无法确定或基本类型";}
}
方法2:JSONValidator
通过自带的JSON校验类校验。
if (JSONValidator.from(jsonData).getType() == JSONValidator.Type.Object) {// 对象
} else if (JSONValidator.from(jsonData).getType() == JSONValidator.Type.Array) {// 数组
}
注意事项
- 准确性:方法1通过实际解析确保结果准确,推荐在需要正确处理时使用。
- 异常处理:解析可能抛出异常(如格式错误),务必使用try-catch块。
- 性能:解析大JSON会消耗资源,但对于结构判断是必要的步骤。
总结
- 准确判断:使用方法1,解析后检查类型。
- 快速推测:使用方法2,但需注意其不可靠性,适用于非关键场景。