首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GREL: qq关于模板导出和空值(打开优化)

GREL: qq关于模板导出和空值(打开优化)
EN

Stack Overflow用户
提问于 2020-08-23 02:26:49
回答 1查看 89关注 0票数 1

有没有比这更优雅的表达式来避免打印空值和单词"NULL"?通过阅读Open Refine的文档https://github.com/OpenRefine/OpenRefine/wiki/General-Refine-Expression-Language,我已经做到了这一点,但感觉很奇怪和复杂。

干杯。

代码语言:javascript
复制
{
  "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)

)}}

  ]
}
EN

回答 1

Stack Overflow用户

发布于 2020-08-23 06:16:00

通常,在进行导出之前,我的目标是使列保持一致(即,要么在所有情况下都包含NULL值,要么在所有情况下都包含字符串“null”,但不是这两者的混合)。因此,您可以首先在列上运行转换,如下所示:

代码语言:javascript
复制
if(value=="NULL",null, value)

如果要先执行此操作,则可以在导出模板中使用:

代码语言:javascript
复制
forNonBlank(cells["homepage"].value,v,"      \"homePage\" : " + jsonize(v),"")

但是,如果您出于某种原因不想在数据中进行此更改,则可以通过使用'coalesce‘函数(从OpenRefine 3.0开始可用)实现一个比现有的更优雅的选项,该函数从列表中选择第一个非空值:

代码语言:javascript
复制
{{ if(coalesce(cells["homepage"].value,"NULL")=="NULL","","      \"homePage\" : " + jsonize(cells["homePage"].value)) }}

如果单元格“主页”.value为空,合并将使用单元格“主页”.value的值;如果单元格“主页”use为空,合并将使用字符串" null“。因此,这意味着如果您向单元格提供内容字符串"NULL“或具有null的单元格-在这两种情况下,coalesce函数都会输出字符串"NULL”-这意味着您只需检查单个条件。

coalesce在https://github.com/OpenRefine/OpenRefine/wiki/GREL%20Other%20Functions上有文档

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63539703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档