JSON, поддерживающий только объекты, просто не соответствует действительности - json.org также не предлагает этот imo. он был получен из javascript и, следовательно, особенно строки и числа также действительны в формате JSON:
var json_string = "1";
var p = eval('(' + json_string + ')');
console.log(p);
// => 1
typeof p
// => "number"
ActiveSupport::JSON
правильно понимает необработанное значение JSON:
require 'active_support/json'
p = ActiveSupport::JSON.decode '1'
# => 1
p.class
# => Fixnum
и MultiJson :
require 'multi_json'
p = MultiJson.load '1'
# => 1
p.class
# => Fixnum
так что, как упоминалось в a2800276, это должно быть ошибкой.
но на момент написания этой статьи в JSON-файле ruby 2 по умолчанию было включено quirks_mode
при использовании метода load
.
require 'json'
p = JSON.load '1'
# => 1
p.class
# => Fixnum