module ActiveSupport::JSON - activesupport-4.2.3 Documentation

# module ActiveSupport::JSON

### Constants

DATE_REGEX

  matches YAML-formatted dates

### Public Class Methods

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 19
    def decode(json, options = {})
      if options.present?
        raise ArgumentError, "In Rails 4.1, ActiveSupport::JSON.decode no longer "              "accepts an options hash for MultiJSON. MultiJSON reached its end of life "              "and has been removed."
      end

      data = ::JSON.parse(json, quirks_mode: true)

      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 21
    def self.encode(value, options = nil)
      Encoding.json_encoder.new(options).encode(value)
    end

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 45
    def parse_error
      ::JSON::ParserError
    end

### Private Class Methods

convert_dates_from(data) click to toggle source

    # File lib/active_support/json/decoding.rb, line 51
    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