You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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();
        }
    }   
}

修改说明:

  1. 处理fields不存在的场景:通过obj.has("fields")判断属性是否存在,不存在则创建空的JsonObject,避免后续调用fieldsObj.get()时触发空指针
  2. 升级getValue方法:先检查fieldValue是否为null(对应属性不存在的情况),再检查是否为JsonNull(对应属性值为null的情况),两种场景均返回空字符串
  3. 修正变量名笔误:将finalIssueObj改为finalDataObj,保证代码能正常编译运行

使用你提供的输入JSON测试,运行后会得到期望的输出:

[{"key" : "1232", "cityName": "Hyderabad", "category" : "Dining"}, 
{"key" : "1233", "cityName": "", "category" : ""},
{"key" : "1234", "cityName": "Delhi", "category" : ""} ]

内容的提问来源于stack exchange,提问作者Siva_K22

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 07:19:56