Groovy中如何为变量分配备选值:JSON指定键不存在时
解决JSON对象多键 fallback 生成集合的问题
你之前用||运算符得到布尔值是因为Groovy里逻辑或返回的是布尔结果,不是集合本身。要实现"Name"键存在时用它生成集合,否则用"address",可以用下面两种方法:
方法一:显式判断键是否存在
遍历每个JSON元素时,先检查当前元素有没有"Name"键,有就用它当键,没有就用"address":
def originals = readJSON text: sourceStagesText originalconfign = originals.collectEntries { def key = it.containsKey('Name') ? it.Name : it.address [(key): it] }.asImmutable()
方法二:用Elvis运算符简化写法
如果"Name"键不存在或者值为null时都想用"address",可以用Groovy的Elvis运算符?:,写法更简洁:
def originals = readJSON text: sourceStagesText originalconfign = originals.collectEntries { [(it.Name ?: it.address): it] }.asImmutable()
为什么之前的代码不对?
A || B这种写法是逻辑判断:如果集合A非空(为true)就返回true,否则判断集合B是否非空,最终返回的是布尔值,而不是返回A或者B集合本身,所以才会得到布尔结果而不是目标集合。
内容的提问来源于stack exchange,提问作者10raw
相关产品推荐
相关产品推荐

