问题描述
有些表达式比这更优雅,可以避免打印NULL和单词“ NULL”? 通过阅读Open Refine的文档https://github.com/OpenRefine/OpenRefine/wiki/General-Refine-Expression-Language,我已经做到了这一点,但是感觉很奇怪而且很复杂。
干杯。
{
"rows" : [
{{ if(isNull(cells["supplierID"].value),""," \"supplierID\" : " + jsonize(cells["supplierID"].value)
)}},{{ if(or(isNull(cells["homePage"].value),cells["homePage"].value == "NULL")," \"homePage\" : " + jsonize(cells["homePage"].value)
)}}
]
}
解决方法
通常,我希望在导出之前使该列保持一致(即在所有情况下都包含null
值,在所有情况下都包含字符串“ NULL”,但不能混合使用)。因此,您可以先对列进行转换,例如:
if(value=="NULL",null,value)
如果要先执行此操作,则可以在导出模板中使用:
forNonBlank(cells["homepage"].value,v," \"homePage\" : " + jsonize(v),"")
但是,如果由于某种原因不想在数据中进行此更改,则可以使用“ coalesce”功能(可从OpenRefine 3.0开始使用)获得比您所拥有的选项更为优雅的选择。从列表中选择第一个非空值:
{{ if(coalesce(cells["homepage"].value,"NULL")=="NULL",""," \"homePage\" : " + jsonize(cells["homePage"].value)) }}
如果为非null,则合并将使用cells [“ homepage”]。value的值;如果cells [“ homepage”]。value 是,则退回到使用字符串“ NULL” em> null。因此,这意味着如果您使用内容字符串“ NULL”或具有null
的单元格填充-合并函数在两种情况下均输出字符串“ NULL”-这意味着您只需要检查单个条件。
coalesce已记录在https://github.com/OpenRefine/OpenRefine/wiki/GREL%20Other%20Functions