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

解析含嵌套对象的JSON数组时Null条件校验失效问题

Gson解析含Null值的JSON数组时Null校验失效的解决方法

你的问题核心出在Gson对JSON Null值的特殊处理上:当JSON字段值为null时,JsonObject.get()返回的不是Java原生的null,而是JsonNull实例,所以你用==null、equals(null)这类判断完全不生效。另外代码里还有几处语法和逻辑错误,一起给你修正。

具体问题拆解

  1. 变量名错误:代码里的finalIssueObj是笔误,应该是finalDataObj,否则直接编译报错。
  2. 无意义的重复解析:你把已经是JsonElement的对象转成字符串再重新parse,既浪费性能,还会把JSON里的null转成字符串"null",导致后续的Null判断彻底失效。
  3. Null判断逻辑错误:Gson中判断JSON字段是否为Null,必须用JsonElement.isJsonNull()方法,或者直接判断是否等于JsonNull.INSTANCE。

修正后的完整代码

import com.google.gson.*;

public class DataParser {
    public static JsonArray parseData(JsonArray data) throws JsonParseException {
        JsonArray dataArray = new JsonArray();
        for (JsonElement dataElement : data) {
            JsonObject obj = dataElement.getAsJsonObject();
            JsonObject finalDataObj = new JsonObject();            
            JsonObject fieldsObj = obj.getAsJsonObject("fields");
            
            finalDataObj.add("key", obj.get("key"));
            finalDataObj.addProperty("cityName", displayName(fieldsObj.get("cityName")));
            finalDataObj.addProperty("category", displayName(fieldsObj.get("category")));
            
            dataArray.add(finalDataObj);
        }
        return dataArray;
    }
    
    public static String displayName(JsonElement dataValue){
        if (dataValue == null || dataValue.isJsonNull()){
             return "";
        } else {            
            JsonObject obj = dataValue.getAsJsonObject();
            // 如果name字段也可能为Null,这里可以再加一层判断
            return obj.get("name").getAsString();
        }
    }   
}

关键修改说明

  • 直接用JsonElement遍历输入数组,避免不必要的类型转换和重复解析操作。
  • 通过getAsJsonObject("fields")直接获取嵌套对象,不用转成字符串再二次解析。
  • displayName方法参数改为JsonElement,用isJsonNull()准确判断JSON中的Null值。
  • 用getAsString()替代toString(),后者会返回带引号的字符串(比如"Hyderabad"),前者返回纯文本值,完全匹配你的期望输出。

测试验证

用你提供的输入JSON运行修正后的代码,会得到完全符合预期的输出:

[{"key":"1232","cityName":"Hyderabad","category":"Dining"},{"key":"1233","cityName":"","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.20 00:25:23