diff --git a/larky/src/main/java/com/verygood/security/larky/modules/JsonModule.java b/larky/src/main/java/com/verygood/security/larky/modules/JsonModule.java index 23ac892fc..86480afd7 100644 --- a/larky/src/main/java/com/verygood/security/larky/modules/JsonModule.java +++ b/larky/src/main/java/com/verygood/security/larky/modules/JsonModule.java @@ -31,6 +31,7 @@ import net.starlark.java.eval.StarlarkThread; import net.starlark.java.eval.StarlarkValue; import net.starlark.java.eval.Structure; +import net.starlark.java.eval.Tuple; import net.starlark.java.lib.json.Json; // Tests at //src/test/java/net/starlark/java/eval:testdata/json.star @@ -223,8 +224,8 @@ private void encode(Object x) throws EvalException { return; } - // e.g. tuple, list - if (x instanceof StarlarkIterable) { + // only real tuple, list JSON arrays + if (x instanceof StarlarkList || x instanceof Tuple) { out.append('['); String sep = ""; int i = 0; @@ -242,6 +243,11 @@ private void encode(Object x) throws EvalException { return; } + //StarlarkIterable not list, tuple + if (x instanceof StarlarkIterable) { + throw Starlark.errorf("Object of type %s is not JSON serializable", Starlark.type(x)); + } + // e.g. struct if (x instanceof Structure) { Structure obj = (Structure) x;