我有一个包含以下内容的专栏:
7. {"resource":"abc"}
8. [{"resource":"def"},{"resource":"ghi"}]我试着获取“资源”的内容:
value.parseJson().resource很管用。如果我试图获取多值单元格的内容,我就无法让它工作。据https://github.com/OpenRefine/OpenRefine/wiki/GREL-Other-Functions报道,我试过了
forEach(value.parseJson().resource,v,v.resource)我犯了很多错误,例如:
7. {"resource":"abc"} Error: First argument to forEach is not an array
8. [{"resource":"def"},{"resource":"ghi"}] Error: Object does not have any field, including resource我只能得到多值单元格,但不能用这个值单元格:
forEach(value.parseJson(),v,v.resource)发布于 2017-01-06 09:29:02
这里存在的一个问题是包含JSON数组(即多个值)的单元格与不包含JSON数组的单元格之间的区别。
处理这个问题有不同的方法,最好的方法可能取决于数据的总体一致性。
我的第一个建议是使用过滤器或facet分别处理单个值和数组单元格。考虑到您在示例中使用的数据,我认为以下几点将有效:
1)使用GREL在列上创建自定义文本面
value.startsWith("[")2)从facet中选择“false”来处理单个值单元格( 3),因为这些单元格使用GREL
value.parseJson().resource4)从面中选择“true”来处理数组单元格( 5),因为这些单元格使用GREL
forEach(value.parseJson(),v,v.resource)(n.b.这与你在问题中提到的GREL略有不同,因为它会造成错误)
6)这个GREL的输出是一个OpenRefine数组。您需要将其转换为字符串以将输出存储在单元格中,因此您可能需要使用以下内容:
forEach(value.parseJson(),v,v.resource).join("|")https://stackoverflow.com/questions/41502023
复制相似问题