1

有比这更优雅的表达式来避免打印 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)

)}}

  ]
}
4

1 回答 1

2

通常我的目标是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)) }}

如果 cells["homepage"].value 不为 null,则合并将使用该值,如果 cells["homepage"].value 为 null,则返回使用字符串 "NULL "。所以这意味着如果你给一个单元格提供内容字符串“NULL”或一个单元格null——在这两种情况下,coalesce 函数都会输出字符串“NULL”——这意味着你只需要检查一个条件。

合并记录在https://github.com/OpenRefine/OpenRefine/wiki/GREL%20Other%20Functions

于 2020-08-22T22:15:59.890 回答