diff --git a/ext/yajl/yajl_ext.c b/ext/yajl/yajl_ext.c index 25120100..edc3b8ab 100644 --- a/ext/yajl/yajl_ext.c +++ b/ext/yajl/yajl_ext.c @@ -167,7 +167,12 @@ void yajl_encode_part(void * wrapper, VALUE obj, VALUE io) { keys = rb_funcall(obj, intern_keys, 0); for(idx=0; idxencoder, 0)); break; case T_FIXNUM: + str = rb_fix2str(obj, 10); + cptr = RSTRING_PTR(str); + len = RSTRING_LEN(str); + CHECK_STATUS(yajl_gen_number(w->encoder, cptr, len)); + break; case T_FLOAT: case T_BIGNUM: str = rb_funcall(obj, intern_to_s, 0); @@ -209,6 +219,12 @@ void yajl_encode_part(void * wrapper, VALUE obj, VALUE io) { len = RSTRING_LEN(obj); CHECK_STATUS(yajl_gen_string(w->encoder, (const unsigned char *)cptr, len)); break; + case T_SYMBOL: + str = rb_id2str(SYM2ID(obj)); + cptr = RSTRING_PTR(str); + len = RSTRING_LEN(str); + CHECK_STATUS(yajl_gen_string(w->encoder, (const unsigned char *)cptr, len)); + break; default: if (rb_respond_to(obj, intern_to_json)) { str = rb_funcall(obj, intern_to_json, 0);