Class: Hash
- Includes:
- ActiveSupport::CoreExtensions::Hash::Conversions, ActiveSupport::CoreExtensions::Hash::DeepMerge, ActiveSupport::CoreExtensions::Hash::Diff, ActiveSupport::CoreExtensions::Hash::Except, ActiveSupport::CoreExtensions::Hash::IndifferentAccess, ActiveSupport::CoreExtensions::Hash::Keys, ActiveSupport::CoreExtensions::Hash::ReverseMerge, ActiveSupport::CoreExtensions::Hash::Slice
- Defined in:
- lib/active_support/core_ext/hash.rb,
lib/active_support/core_ext/blank.rb,
lib/active_support/json/encoders/hash.rb
Overview
:nodoc:
Direct Known Subclasses
Constant Summary
Constants included from ActiveSupport::CoreExtensions::Hash::Conversions
ActiveSupport::CoreExtensions::Hash::Conversions::XML_FORMATTING, ActiveSupport::CoreExtensions::Hash::Conversions::XML_PARSING, ActiveSupport::CoreExtensions::Hash::Conversions::XML_TYPE_NAMES
Instance Method Summary collapse
-
#to_json(options = {}) ⇒ Object
Returns a JSON string representing the hash.
Methods included from ActiveSupport::CoreExtensions::Hash::Except
Methods included from ActiveSupport::CoreExtensions::Hash::Slice
Methods included from ActiveSupport::CoreExtensions::Hash::Diff
Methods included from ActiveSupport::CoreExtensions::Hash::Conversions
included, #rename_key, #to_query, #to_xml
Methods included from ActiveSupport::CoreExtensions::Hash::ReverseMerge
#reverse_merge, #reverse_merge!
Methods included from ActiveSupport::CoreExtensions::Hash::DeepMerge
Methods included from ActiveSupport::CoreExtensions::Hash::IndifferentAccess
Methods included from ActiveSupport::CoreExtensions::Hash::Keys
#assert_valid_keys, #stringify_keys, #stringify_keys!, #symbolize_keys, #symbolize_keys!
Instance Method Details
#to_json(options = {}) ⇒ Object
Returns a JSON string representing the hash.
Without any options
, the returned JSON string will include all the hash keys. For example:
{ :name => "Konata Izumi", 'age' => 16, 1 => 2 }.to_json
# => {"name": "Konata Izumi", "1": 2, "age": 16}
The keys in the JSON string are unordered due to the nature of hashes.
The :only
and :except
options can be used to limit the attributes included, and will accept 1 or more hash keys to include/exclude.
{ :name => "Konata Izumi", 'age' => 16, 1 => 2 }.to_json(:only => [:name, 'age'])
# => {"name": "Konata Izumi", "age": 16}
{ :name => "Konata Izumi", 'age' => 16, 1 => 2 }.to_json(:except => 1)
# => {"name": "Konata Izumi", "age": 16}
The options
also filter down to any hash values. This is particularly useful for converting hashes containing ActiveRecord objects or any object that responds to options in their to_json
method. For example:
users = User.find(:all)
{ :users => users, :count => users.size }.to_json(:include => :posts)
would pass the :include => :posts
option to users
, allowing the posts association in the User model to be converted to JSON as well.
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/active_support/json/encoders/hash.rb', line 31 def to_json( = {}) #:nodoc: hash_keys = self.keys if except = [:except] hash_keys = hash_keys - Array.wrap(except) elsif only = [:only] hash_keys = hash_keys & Array.wrap(only) end result = '{' result << hash_keys.map do |key| "#{ActiveSupport::JSON.encode(key.to_s)}: #{ActiveSupport::JSON.encode(self[key], )}" end * ', ' result << '}' end |