diff --git a/c_src/encoder.c b/c_src/encoder.c index afc3c146..5618da00 100644 --- a/c_src/encoder.c +++ b/c_src/encoder.c @@ -781,8 +781,11 @@ encode_iter(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) } } else if(enif_get_tuple(env, curr, &arity, &tuple)) { if(arity != 1) { - ret = enc_obj_error(e, "invalid_ejson", curr); - goto done; + if(!enc_unknown(e, curr)) { + ret = enc_error(e, "internal_error"); + goto done; + } + continue; } if(!enif_is_list(env, tuple[0])) { ret = enc_obj_error(e, "invalid_object", curr); diff --git a/src/jiffy.erl b/src/jiffy.erl index 0d9b7e41..d42c22cc 100644 --- a/src/jiffy.erl +++ b/src/jiffy.erl @@ -160,6 +160,8 @@ finish_encode([<<_/binary>>=B | Rest], Acc) -> finish_encode([Val | Rest], Acc) when is_integer(Val) -> Bin = list_to_binary(integer_to_list(Val)), finish_encode(Rest, [Bin | Acc]); +finish_encode([{json, Json} | Rest], Acc) -> + finish_encode(Rest, [Json | Acc]); finish_encode([InvalidEjson | _], _) -> throw({error, {invalid_ejson, InvalidEjson}}); finish_encode(_, _) ->