diff --git a/main/src/com/google/refine/expr/functions/arrays/Join.java b/main/src/com/google/refine/expr/functions/arrays/Join.java index 64b571d32..492ab9448 100644 --- a/main/src/com/google/refine/expr/functions/arrays/Join.java +++ b/main/src/com/google/refine/expr/functions/arrays/Join.java @@ -41,6 +41,7 @@ import org.json.JSONException; import com.fasterxml.jackson.databind.node.ArrayNode; import com.google.refine.expr.EvalError; import com.google.refine.expr.ExpressionUtils; +import com.google.refine.expr.util.JsonValueConverter; import com.google.refine.grel.ControlFunctionRegistry; import com.google.refine.grel.Function; @@ -75,7 +76,7 @@ public class Join implements Function { sb.append(separator); } try { - sb.append(a.get(i).toString()); + sb.append(JsonValueConverter.convert(a.get(i)).toString()); } catch (JSONException e) { return new EvalError(ControlFunctionRegistry.getFunctionName(this) + " cannot retrieve element " + i + " of array"); diff --git a/main/tests/server/src/com/google/refine/tests/grel/GrelTests.java b/main/tests/server/src/com/google/refine/tests/grel/GrelTests.java index e52dc1b90..9cb69544c 100644 --- a/main/tests/server/src/com/google/refine/tests/grel/GrelTests.java +++ b/main/tests/server/src/com/google/refine/tests/grel/GrelTests.java @@ -179,6 +179,12 @@ public class GrelTests extends RefineTest { Evaluable eval = MetaParser.parse("grel:" + test); Assert.assertNull(eval.evaluate(bindings)); } + + @Test + public void testJoinJsonArray() throws ParsingException { + String test[] = { "\"{\\\"values\\\":[\\\"one\\\",\\\"two\\\",\\\"three\\\"]}\".parseJson().values.join(\",\")", "one,two,three" }; + parseEval(bindings, test); + } @Test public void testGetFieldFromNull() throws ParsingException {