在嵌套数据中查找空值和空字符串(Java)

在嵌套数据中查找空值和空字符串(Java),java,json,null,Java,Json,Null,我想检查我的数据是否有空值。 JSON格式的数据如下: "{ "totalAmount" : 20000, "items" : [ { "id" : "9fd91eaf-2b9a-4bae-9692-4222f85e868", "name" : "X hotel", "itemType" : 0, "orderCount" : 2, "amount" : 5000 }, {

我想检查我的数据是否有空值。 JSON格式的数据如下:

"{

    "totalAmount" : 20000,
    "items" : [
    {
        "id" : "9fd91eaf-2b9a-4bae-9692-4222f85e868",
        "name" : "X hotel",
        "itemType" : 0,
        "orderCount" : 2,
        "amount" : 5000
    },
    {
        "id" : "9fd91eaf-2b9a-4bae-9692-4222f85e869",
        "name": "Special Dinner",
        "itemType" : 1,
        "orderCount" : 1,
        "amount" : 10000
    }
    ]
}"
这是我的检查逻辑

class NullCheck {
    public checkNull (Itinerary itinerary)
        Object nu = null;
    if (itinerary == null) {
        return true;
    } else if (itinerary.getTotalAmount() == null || itinerary.getItems() == null) {
        return true;
    } else if (itinerary.getItems().contains(null)) {
        return true;
    } else if (itinerary.getItems().stream().flatMap  // 
            (item -> Arrays.stream(item.getClass().getDeclaredFields()))
            .map(field -> { field.setAccessible(true); return field.get(nu) == null; } ) ) {
        return true;
    }
}
然而,IlligalAccessException被抛出field.get(nu),我不明白为什么我的代码不能正常工作。 当我阅读java文档时,它的语法似乎是正确的。 我能问一下我的代码的哪一部分失败了吗? 此外,一些json格式的数据被转换为
String
类型的对象,因此我还需要检查
String
是否为空
String
。 有简单的方法吗

Object nu = null;
您正在尝试获取空对象“nu”。这就是你得到IlligalacessException的原因


您正在尝试获取空对象“nu”。这就是你得到IlligalacessException的原因

文档的
字段。获取

在 指定的对象。如果出现以下情况,该值将自动包装到对象中: 它有一个基本类型

看,它在指定的对象上是怎么说的?这是因为字段对象不再与特定对象关联

这意味着
Field.get
操作需要传递给
item
对象,而不是当前传递的
null
assigned
nu
对象


这看起来非常乏味,请尝试使用类似于JSON模式验证的库。

文档for
字段。获取

在 指定的对象。如果出现以下情况,该值将自动包装到对象中: 它有一个基本类型

看,它在指定的对象上是怎么说的?这是因为字段对象不再与特定对象关联

这意味着
Field.get
操作需要传递给
item
对象,而不是当前传递的
null
assigned
nu
对象


这看起来非常乏味,请尝试使用类似于JSON模式验证的库。

我认为您的代码中有两个错误

第一:

if (itinerary.getItems().stream().flatMap  // 
        (item -> Arrays.stream(item.getClass().getDeclaredFields()))
        .map(field -> { field.setAccessible(true); return field.get(nu) == null; } ) ) {
    return true;
}
.map
方法的结果是一个
,而不是布尔表达式。因此将出现语法错误,无法编译

第二点:

return field.get(nu) == null;

此代码将抛出
NullPointerException
,而
字段是一个实例字段。而
字段中的
get
方法可能抛出一些
异常
,因此应该尝试捕捉它。

我认为您的代码中有两个错误

第一:

if (itinerary.getItems().stream().flatMap  // 
        (item -> Arrays.stream(item.getClass().getDeclaredFields()))
        .map(field -> { field.setAccessible(true); return field.get(nu) == null; } ) ) {
    return true;
}
.map
方法的结果是一个
,而不是布尔表达式。因此将出现语法错误,无法编译

第二点:

return field.get(nu) == null;
字段是一个实例字段时,此代码将抛出
NullPointerException
。而
字段中的方法
get
可以抛出一些
异常
,因此应该尝试捕获它