2017-01-06 8 views
3

에서 JSON을 다중. 다중 값 셀의 내용을 가져 오려고하면 제대로 작동하지 않습니다.는 구문 분석 나는 다음과 같은 내용으로 열이 GREL (OpenRefine)

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

내가 예를 들어, 많은 오류를 얻을 : 내가 https://github.com/OpenRefine/OpenRefine/wiki/GREL-Other-Functions에 따라 시도

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) 

답변

2

여기에있는 문제는 JSON 배열이 포함 된 셀 (예 : 다중 값)과 그렇지 않은 셀의 차이점입니다.

이 문제에 접근하는 방법에는 여러 가지가 있으며 최상의 접근 방법은 데이터의 전체적인 일관성에 따라 달라질 수 있습니다.

첫 번째 제안은 필터 또는 패싯을 사용하여 단일 값 및 배열 셀을 개별적으로 작업하는 것입니다. 당신이 당신의 예에서 사용하는 데이터를 감안할 때 나는 다음과 같은 작업 것이라고 생각 :

1)이 GREL

value.startsWith("[") 

2) 작동하는면에서 '거짓'를 선택를 사용하여 열에 대한 사용자 정의 텍스트 패싯 만들기 이들 셀들에 대한 단일 값 세포 3)에 이들 세포가 GREL

,691 사용할 어레이 셀 5)와 함께 작동하도록 GREL가

value.parseJson().resource 

4)면에서 '참'을 선택 사용

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

(n.b. 이 질문은 GREL에서 약간의 차이가 있습니다.)

6)이 GREL의 출력은 OpenRefine 배열입니다. 출력을 셀에 저장하려면 문자열로 변환해야합니다. 다음과 같은 것을 사용해야 할 수도 있습니다 :

forEach(value.parseJson(),v,v.resource).join("|") 
+1

한 줄에 넣고 싶다면 다음을 사용할 수 있습니다 :'' '''(value.parseJson(), v, v.resource) .join ("|"), value.parseJson(). resource)''' –

+0

고마워요. , 그 일했다! –