Java中使用Gson解析JSON时如何处理缺失属性避免空指针异常
解决Gson解析JSON时属性不存在的空指针问题
你的代码目前存在几个导致空指针异常的问题,同时还有一处变量名笔误:
- 变量名写错:
finalIssueObj应该是finalDataObj,原代码的笔误会直接引发编译错误 getValue方法未处理fieldValue为null的场景:当JSON中目标属性不存在时,fieldsObj.get("xxx")会返回null,此时调用isJsonNull()会触发空指针- 未考虑
fields本身不存在的情况:如果某个JSON元素没有fields属性,obj.getAsJsonObject("fields")会返回null,后续调用fieldsObj.get()也会抛出空指针
以下是修改后的完整代码:
import com.google.gson.*; public class DataParser { public static JsonArray parseData(JsonArray data) throws JsonParseException { JsonArray dataArray = new JsonArray(); for (JsonElement dataObj : data) { JsonObject obj = dataObj.getAsJsonObject(); JsonObject finalDataObj = new JsonObject(); // 判断fields是否存在,不存在则创建空JsonObject避免后续空指针 JsonObject fieldsObj = obj.has("fields") ? obj.getAsJsonObject("fields") : new JsonObject(); finalDataObj.add("key", obj.get("key")); // 调用修改后的getValue处理属性不存在或为null的情况 finalDataObj.addProperty("cityName", getValue(fieldsObj.get("cityName"))); finalDataObj.addProperty("category", getValue(fieldsObj.get("category"))); dataArray.add(finalDataObj); } return dataArray; } public static String getValue(JsonElement fieldValue){ // 同时处理属性不存在(fieldValue为null)和属性值为null(JsonNull)的情况 if(fieldValue == null || fieldValue.isJsonNull()) { return ""; } else { return fieldValue.getAsString(); } } }
修改说明:
- 处理
fields不存在的场景:通过obj.has("fields")判断属性是否存在,不存在则创建空的JsonObject,避免后续调用fieldsObj.get()时触发空指针 - 升级
getValue方法:先检查fieldValue是否为null(对应属性不存在的情况),再检查是否为JsonNull(对应属性值为null的情况),两种场景均返回空字符串 - 修正变量名笔误:将
finalIssueObj改为finalDataObj,保证代码能正常编译运行
使用你提供的输入JSON测试,运行后会得到期望的输出:
[{"key" : "1232", "cityName": "Hyderabad", "category" : "Dining"}, {"key" : "1233", "cityName": "", "category" : ""}, {"key" : "1234", "cityName": "Delhi", "category" : ""} ]
内容的提问来源于stack exchange,提问作者Siva_K22
相关产品推荐
相关产品推荐

