mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
[flori/json] Add shortcut converting to String
In where to convert Hash key to String for json, this patch will add shortcut for String/Symbol in Hash key. ``` $ ruby bench_json_generate.rb Warming up -------------------------------------- json 65.000 i/100ms Calculating ------------------------------------- json 659.576 (± 1.5%) i/s - 3.315k in 5.027127s ``` ``` $ ruby bench_json_generate.rb Warming up -------------------------------------- json 78.000 i/100ms Calculating ------------------------------------- json 789.781 (± 2.7%) i/s - 3.978k in 5.041043s ``` ``` require 'json' require 'benchmark/ips' obj = [] 1000.times do |i| obj << { "id" => i, :age => 42, } end Benchmark.ips do |x| x.report "json" do |iter| count = 0 while count < iter JSON.generate(obj) count += 1 end end end ``` https://github.com/flori/json/commit/38c0f6dbe4
This commit is contained in:
parent
a2f9c38a71
commit
98a9445db9
1 changed files with 9 additions and 2 deletions
|
@ -744,7 +744,7 @@ json_object_i(VALUE key, VALUE val, VALUE _arg)
|
|||
long delim2_len = FBUFFER_LEN(state->object_delim2);
|
||||
long depth = state->depth;
|
||||
int j;
|
||||
VALUE key_to_s;
|
||||
VALUE klass, key_to_s;
|
||||
|
||||
if (arg->iter > 0) fbuffer_append(buffer, delim, delim_len);
|
||||
if (object_nl) {
|
||||
|
@ -756,7 +756,14 @@ json_object_i(VALUE key, VALUE val, VALUE _arg)
|
|||
}
|
||||
}
|
||||
|
||||
key_to_s = rb_funcall(key, i_to_s, 0);
|
||||
klass = CLASS_OF(key);
|
||||
if (klass == rb_cString) {
|
||||
key_to_s = key;
|
||||
} else if (klass == rb_cSymbol) {
|
||||
key_to_s = rb_id2str(SYM2ID(key));
|
||||
} else {
|
||||
key_to_s = rb_funcall(key, i_to_s, 0);
|
||||
}
|
||||
Check_Type(key_to_s, T_STRING);
|
||||
generate_json(buffer, Vstate, state, key_to_s);
|
||||
fbuffer_append(buffer, delim2, delim2_len);
|
||||
|
|
Loading…
Reference in a new issue