【问题标题】:How to handle the case when field is not present in Object Java?Object Java中不存在字段时如何处理?
【发布时间】:2021-10-27 13:27:52
【问题描述】:

我的数据库中有一个类似这样的对象,现在我的要求是找到特定字段的值,例如 name,如果存在则返回 true,

{
    "_id" : "123",
    "name" : "Team"
}

但在某些情况下,字段名称本身并不存在。示例可以是这样的:

{
    "id":1234
}

在这种情况下,我需要返回 false。

如何验证特定对象中是否存在 name 字段?

我试图使用类似这样的 StringUtils 方法 StringUtils.isBlank(obj.getName);
但是它的抛出它正在抛出 java.lang.NullPointerException 。

【问题讨论】:

  • “无法处理”是什么意思?尝试后会发生什么?
  • 使用StringUtils.isBlank 应该没问题,即使在名称为空的情况下也是如此。如果你得到一个,你能分享更多的代码和你得到的异常。我假设您创建 obj 没有问题,并且它反映了数据库中的对象
  • 在这种情况下抛出 java.lang.NullPointerException
  • 你的班级是什么样的?您在上面显示 json。
  • 它是一个实体类

标签: java spring spring-boot


【解决方案1】:

您可以使用 Json 模式验证器。如果您的 json 将采用特定格式。请看一下杰克逊图书馆。

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
【解决方案2】:

JSONObject 类有一个名为“has”的方法。试试这个方法,

if (json.has("name")) {
   String status = json.getString("name"));
}

这会起作用

【讨论】:

    【解决方案3】:

    您可以使用Gson Java 库将 Java 对象序列化和反序列化为 JSON(如下所示)。

    Gson gson = new Gson();
    JsonObject jsonObject = gson.fromJson(object, JsonObject.class);
    

    然后,您可以使用JsonObject中的has方法,检查key是否存在于其中。

    jsonObject.has(key)
    

    例子:

    下面是检查给定的key是否存在于给定的json字符串中,并获取它的值的方法。

    (除了String,您也可以使用您的对象。在这里,我将jsonStr视为String对象,以便更好地理解。)

    private String getValueFromJsonForGivenKey(String key, String jsonStr) {
        Gson gson = new Gson();
        JsonObject jsonObject = gson.fromJson(jsonStr, JsonObject.class);
        if (jsonObject.has(key)) {
            // The given JSON string has the given key
            String value = jsonObject.get(key).getAsString();
            return value;
        }
        return null;
    }
    

    对于键 id 和 jsonStr { "id": "1234" },我们得到 1234

    对于键name 和对于jsonStr { "id": "1234" },我们得到null

    【讨论】:

      【解决方案4】:

      你可以做的是使用 JSONObject 的 opt 方法 例如。

      JSONObject jsonObject = new JSONObject(myJSONString);
      String name = jsonObject.optString("name");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-09-29
        • 2016-06-13
        • 2012-12-03
        • 1970-01-01
        • 2012-01-11
        • 1970-01-01
        相关资源
        最近更新 更多