diff --git a/c_src/encoder.c b/c_src/encoder.c index e864777..3ee1f59 100644 --- a/c_src/encoder.c +++ b/c_src/encoder.c @@ -814,9 +814,25 @@ encode_iter(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) ret = enc_obj_error(e, "invalid_object_member_arity", item); goto done; } - if(!enc_string(e, tuple[0])) { - ret = enc_obj_error(e, "invalid_object_member_key", tuple[0]); - goto done; + if(enif_get_int64(env, tuple[0], &lval)) { + if (!enc_char(e, '"')) { + ret = enc_error(e, "internal_error"); + goto done; + } + if(!enc_long(e, lval)) { + ret = enc_obj_error(e, "invalid_object_member_key", tuple[0]); + goto done; + } + if (!enc_char(e, '"')) { + ret = enc_error(e, "internal_error"); + goto done; + } + } + else { + if(!enc_string(e, tuple[0])) { + ret = enc_obj_error(e, "invalid_object_member_key", tuple[0]); + goto done; + } } if(!enc_colon(e)) { ret = enc_error(e, "internal_error");