module ActiveSupport::JSON

Constants

DATE_REGEX

matches YAML-formatted dates

Public Class Methods

backend()
Alias for: engine
backend=(name)
Alias for: engine=
decode(json, options ={}) click to toggle source

Parses a JSON string (JavaScript Object Notation) into a hash. See www.json.org for more info.

ActiveSupport::JSON.decode("{\"team\":\"rails\",\"players\":\"36\"}")
=> {"team" => "rails", "players" => "36"}
# File lib/active_support/json/decoding.rb, line 16
def decode(json, options ={})
  data = MultiJson.load(json, options)
  if ActiveSupport.parse_json_times
    convert_dates_from(data)
  else
    data
  end
end
encode(value, options = nil) click to toggle source

Dumps objects in JSON (JavaScript Object Notation). See www.json.org for more info.

ActiveSupport::JSON.encode({ team: 'rails', players: '36' })
# => "{\"team\":\"rails\",\"players\":\"36\"}"
# File lib/active_support/json/encoding.rb, line 33
def self.encode(value, options = nil)
  Encoding::Encoder.new(options).encode(value)
end
engine() click to toggle source
# File lib/active_support/json/decoding.rb, line 25
def engine
  MultiJson.adapter
end
Also aliased as: backend
engine=(name) click to toggle source
# File lib/active_support/json/decoding.rb, line 30
def engine=(name)
  MultiJson.use(name)
end
Also aliased as: backend=
parse_error() click to toggle source

Returns the class of the error that will be raised when there is an error in decoding JSON. Using this method means you won't directly depend on the ActiveSupport's JSON implementation, in case it changes in the future.

begin
  obj = ActiveSupport::JSON.decode(some_string)
rescue ActiveSupport::JSON.parse_error
  Rails.logger.warn("Attempted to decode invalid JSON: #{some_string}")
end
# File lib/active_support/json/decoding.rb, line 52
def parse_error
  MultiJson::DecodeError
end
with_backend(name) { || ... } click to toggle source
# File lib/active_support/json/decoding.rb, line 35
def with_backend(name)
  old_backend, self.backend = backend, name
  yield
ensure
  self.backend = old_backend
end

Private Class Methods

convert_dates_from(data) click to toggle source
# File lib/active_support/json/decoding.rb, line 58
def convert_dates_from(data)
  case data
  when nil
    nil
  when DATE_REGEX
    begin
      DateTime.parse(data)
    rescue ArgumentError
      data
    end
  when Array
    data.map! { |d| convert_dates_from(d) }
  when Hash
    data.each do |key, value|
      data[key] = convert_dates_from(value)
    end
  else
    data
  end
end