gson 将不存在的键初始化为空数组列表

kmb7vmvb  于 2022-12-23  发布在  其他
关注(0)|答案(1)|浏览(174)

我有一个类:

class Con {
 private List<Ind> inds;
}

我用Gson把一个JSON字符串转换成这个类对象,所以如果JSON没有键inds,这个变量inds会被赋一个空值,有没有办法给inds赋一个空的ArrayList?

我的想法

一个直接的方法是在Gson对象构建完成后,检查所有的null对象,并将它们赋给新的ArrayList〈〉(),有没有更好的方法?

public List<Ind> getInds() {
        return inds;
    }

目前,我在以下代码中使用了上述getter:con.getInds().stream(),这将导致NullPointerException异常。
我不确定什么是解决这个问题的好方法。除了List,我应该返回一个可选的还是应该修改这个getter

public List<Ind> getInds() {
            inds==null?new ArrayList<>():inds;
        }

以上也将解决NullPointerException。不确定使用这种方法是否有优点和缺点。虽然现在没有办法识别Json是否有一个名为inds的键。对于我正在编写的当前代码来说,这可能不需要。但这里肯定有一个意义损失。

o4hqfura

o4hqfura1#

解决此问题的一种方法是为字段指定默认值,例如:

class Con {
    private List<Ind> inds = new ArrayList<>();
}

Gson将保留此默认值;只有当JSON数据中存在该字段时,才会重新分配字段值。
不过,有几件事要记住:

  • 你的类需要一个无参数的构造函数(隐式或显式);否则Gson可能会创建示例而不调用类的初始化块,因此字段将为null
  • 如果字段存在于JSON中,但具有JSON null值,则Gson仍将其设置为value
  • 之后,您无法判断该字段是否存在于JSON中,但其值为空JSON数组,或者该字段是否丢失

相关问题