Java读取JSON文件时如何判断值为JSONObject或JSONArray
解决JSON中value字段多类型判断的问题
我之前处理过类似的JSON结构,刚好能帮到你!你现在的代码直接把value强转为JSONObject,但实际它可能是JSONArray,这肯定会抛出类型转换异常。其实用instanceof关键字就能轻松判断它的类型,再分别处理两种情况。
首先修正你代码里的一个小错误:你之前写的JSONObject value = (JSONObject) o;不对,o已经是declared_variable这个JSONObject了,你应该从它里面取出value字段,再判断类型。
下面是调整后的完整代码:
public static void getInput() throws IOException, ParseException { // 创建JSON解析器 JSONParser parser = new JSONParser(); File file = new File("my file"); Object ob = parser.parse(new FileReader(file)); JSONObject job = (JSONObject) ob; JSONArray ja = (JSONArray) job.get("declaration-list"); for (Object o : ja) { JSONObject declared_variable = (JSONObject) o; // 先以Object类型获取value字段,不直接强转 Object valueObj = declared_variable.get("value"); // 判断value是JSONObject还是JSONArray if (valueObj instanceof JSONObject) { // 处理JSONObject类型的value JSONObject valueJson = (JSONObject) valueObj; String dv = (String) declared_variable.get("declared-variable"); long v = (long) valueJson.get("value"); // 在这里添加你对JSONObject类型value的后续处理逻辑 } else if (valueObj instanceof JSONArray) { // 处理JSONArray类型的value,获取operator和arguments JSONArray valueArr = (JSONArray) valueObj; // 遍历数组,假设数组内是包含operator和arguments的JSONObject for (Object arrItem : valueArr) { if (arrItem instanceof JSONObject) { JSONObject itemObj = (JSONObject) arrItem; String operator = (String) itemObj.get("operator"); JSONArray arguments = (JSONArray) itemObj.get("arguments"); // 在这里添加对operator和arguments的处理逻辑 } } } else { // 可选:处理其他可能的类型,比如字符串、数字等 System.out.println("遇到未知的value类型: " + valueObj.getClass().getName()); } } }
关键说明:
- 核心逻辑:用
instanceof判断valueObj的实际类型,避免直接强转引发ClassCastException - 先取Object再判断:不要一开始就把
value强转为某一种类型,先以Object类型取出,再分支处理 - 修正字段获取:你之前错误地把循环变量
o直接转成了value的JSONObject,实际上应该从declared_variable中获取value字段
这样就能完美适配value字段既是JSONObject又是JSONArray的情况啦!
内容的提问来源于stack exchange,提问作者user6149776
相关产品推荐
相关产品推荐

