4

次の内容の列があります。

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)
4

1 に答える 1

2

ここでの問題は、JSON 配列 (複数の値) を含むセルと含まないセルの違いです。

この問題へのアプローチにはさまざまな方法があり、最適なアプローチは、データ全体の一貫性に依存する場合があります。

私の最初の提案は、フィルターまたはファセットを使用して、単一の値と配列セルを別々に操作することです。例で使用するデータを考えると、次のように機能すると思います。

1) GREL を使用して、列にカスタム テキスト ファセットを作成します。

value.startsWith("[")

2) ファセットから「false」を選択して、単一値セルを操作します 3) これらのセルには GREL を使用します

value.parseJson().resource

4) ファセットから「true」を選択して配列セルを操作します 5) これらのセルには GREL を使用します

forEach(value.parseJson(),v,v.resource)

(nbこれは、質問でエラーを与えるとして言及したGRELとは少し異なります)

6) この GREL の出力は OpenRefine 配列です。出力をセルに格納するには、これを文字列に変換する必要があるため、次のようなものを使用する必要がある場合があります。

forEach(value.parseJson(),v,v.resource).join("|")
于 2017-01-06T09:29:02.890 に答える