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
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 46 |
# File 'lib/active_support/json/encoders/hash.rb', line 31 def to_json( = {}) #:nodoc: hash_keys = self.keys if [:except] hash_keys = hash_keys - Array([:except]) elsif [:only] hash_keys = hash_keys & Array([:only]) end returning result = '{' do result << hash_keys.map do |key| "#{ActiveSupport::JSON.encode(key)}: #{ActiveSupport::JSON.encode(self[key], )}" end * ', ' result << '}' end end |