module MultiJson
def adapter
def adapter return @adapter if defined?(@adapter) && @adapter use nil # load default adapter @adapter end
def current_adapter(options = {})
def current_adapter(options = {}) if (new_adapter = options[:adapter]) load_adapter(new_adapter) else adapter end end
def default_adapter
if any adapters are already loaded, then checks
have loaded and installed. First checks to see
The default adapter based on what you currently
def default_adapter return :oj if defined?(::Oj) return :yajl if defined?(::Yajl) return :jr_jackson if defined?(::JrJackson) return :json_gem if defined?(::JSON::Ext::Parser) return :gson if defined?(::Gson) REQUIREMENT_MAP.each do |adapter, library| begin require library return adapter rescue ::LoadError next end end Kernel.warn '[WARNING] MultiJson is using the default adapter (ok_json). ' \ 'We recommend loading a different JSON library to improve performance.' :ok_json end
def default_options
def default_options Kernel.warn "MultiJson.default_options is deprecated\n" \ 'Use MultiJson.load_options or MultiJson.dump_options instead' load_options end
def default_options=(value)
def default_options=(value) Kernel.warn "MultiJson.default_options setter is deprecated\n" \ 'Use MultiJson.load_options and MultiJson.dump_options instead' self.load_options = self.dump_options = value end
def dump(object, options = {})
def dump(object, options = {}) current_adapter(options).dump(object, options) end
def load(string, options = {})
:symbolize_keys :: If true, will use symbols instead of strings for the keys.
Options
Decode a JSON string into Ruby.
def load(string, options = {}) adapter = current_adapter(options) begin adapter.load(string, options) rescue adapter::ParseError => exception raise ParseError.build(exception, string) end end
def load_adapter(new_adapter)
def load_adapter(new_adapter) case new_adapter when String, Symbol load_adapter_from_string_name new_adapter.to_s when NilClass, FalseClass load_adapter default_adapter when Class, Module new_adapter else fail ::LoadError, new_adapter end rescue ::LoadError => exception raise AdapterError.build(exception) end
def load_adapter_from_string_name(name)
def load_adapter_from_string_name(name) name = ALIASES.fetch(name, name) require "multi_json/adapters/#{name.downcase}" klass_name = name.to_s.split('_').map(&:capitalize) * '' MultiJson::Adapters.const_get(klass_name) end
def use(new_adapter)
* :gson (JRuby only)
* :nsjsonserialization (MacRuby only)
* :yajl
* :ok_json
* :json_pure
* :json_gem
* :oj
Supported by default are:
Set the JSON parser utilizing a symbol, string, or class.
def use(new_adapter) @adapter = load_adapter(new_adapter) ensure OptionsCache.reset end
def with_adapter(new_adapter)
def with_adapter(new_adapter) old_adapter = adapter self.adapter = new_adapter yield ensure self.adapter = old_adapter end