java 空条件检查在解析包含嵌套对象的JSON数组时不起作用

vxf3dgd4  于 2023-06-04  发布在  Java
关注(0)|答案(1)|浏览(202)

Java初学者使用以下代码将嵌套对象的JSON数组解析为简化的JSON数组。
如果对象中没有空值,则可以正常工作。空值检查似乎有故障。在此之前,我也尝试过其他方法,如==nullequals(null)equals("null")!=null!="null"=="null"

import com.google.gson.*;

public class DataParser {
    public static JsonArray parseData(JsonArray data) throws JsonParseException {
        JsonArray dataArray = new JsonArray();
        for (Object dataObj : data) {
            JsonParser parser = new JsonParser();
            JsonObject obj = (JsonObject) parser.parse(dataObj.toString());
            JsonObject finalDataObj = new JsonObject();            
            Object fields = obj.get("fields");            
            JsonObject fieldsObj = (JsonObject) parser.parse(fields.toString());
            finalDataObj.add("key", obj.get("key"));
            finalIssueObj.addProperty("cityName", displayName(fieldsObj.get("cityName")));
            finalIssueObj.addProperty("category", displayName(fieldsObj.get("category")));
            dataArray.add(finalDataObj);
        }
        return dataArray;
    }
    
     public static String displayName(Object dataValue){
        if ( dataValue == null){
             return "";
        }
        else {            
            JsonObject obj = (JsonObject)dataValue;
            return obj.get("name").toString();
        }
    }   
}

输入:

[{"key":"1232", "fields": {cityName":{"id":"10000","description":"This is city name","iconUrl":"https://iconurls.com","name":"Hyderabad","subtask":false},"updated":"2023-05-31","category":{"description":"This is category of city.","iconUrl":"https://category1.icon.com","name":"Dining"}}},
{"key":"1233", "fields": {cityName":null,"updated":"2023-05-31","category":null}}]

输出:

[{"key" : "1232", "cityName": "Hyderabad", "category" : "Dining"}, 
{"key" : "1233", "cityName": "", "category" : ""} ]`
mfpqipee

mfpqipee1#

在提供的代码中,您尝试使用dataValue == null检查空值。但是,对于JSON对象,使用==检查null不会像预期的那样工作。相反,您可以使用Gson库提供的JsonNull类来检查空值。

public static String displayName(JsonElement dataValue) {
   if (dataValue == null || dataValue.isJsonNull()) {
       return "";
   } else {
       JsonObject obj = dataValue.getAsJsonObject();
       return obj.get("name").getAsString();
   }
}

此外,parseData方法中的dataObj的类型为JsonElement而不是Object,以避免不必要的转换。

for (JsonElement dataObj : data) {
       JsonParser parser = new JsonParser();
       JsonObject obj = dataObj.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);
    }

相关问题