Methods

Constants

DATETIME_REGEX = /\A(?:\d{4}-\d{2}-\d{2}|\d{4}-\d{1,2}-\d{1,2}[T \t]+\d{1,2}:\d{2}:\d{2}(\.[0-9]*)?(([ \t]*)Z|[-+]\d{2}?(:\d{2})?)?)\z/
DATE_REGEX = /\A\d{4}-\d{2}-\d{2}\z/
 

matches YAML-formatted dates

Attributes

[RW] escape_html_entities_in_json

If true, encode >, <, & as escaped unicode sequences (e.g. > as u003e) as a safety measure.

[R] json_encoder

Sets the encoder used by Rails to encode Ruby objects into JSON strings in +Object#to_json+ and ActiveSupport::JSON.encode.

[RW] time_precision

Sets the precision of encoded time values. Defaults to 3 (equivalent to millisecond precision)

[RW] use_standard_json_time_format

If true, use ISO 8601 format for dates and times. Otherwise, fall back to the Active Support legacy format.

Class Public methods

decode(json, options = {})

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

ActiveSupport::JSON.decode("{\"team\":\"rails\",\"players\":\"36\"}")
# => {"team" => "rails", "players" => "36"}
ActiveSupport::JSON.decode("2.39")
# => 2.39
Also aliased as: load
๐Ÿ“ Source code
# File activesupport/lib/active_support/json/decoding.rb, line 24
      def decode(json, options = {})
        data = ::JSON.parse(json, options)

        if ActiveSupport.parse_json_times
          convert_dates_from(data)
        else
          data
        end
      end
๐Ÿ”Ž See on GitHub

dump(value, options = nil)

Alias for: encode

encode(value, options = nil)

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\"}"

By default, it generates JSON that is safe to include in JavaScript, as it escapes U+2028 (Line Separator) and U+2029 (Paragraph Separator):

ActiveSupport::JSON.encode({ key: "\u2028" })
# => "{\"key\":\"\\u2028\"}"

By default, it also generates JSON that is safe to include in HTML, as it escapes <, >, and &:

ActiveSupport::JSON.encode({ key: "<>&" })
# => "{\"key\":\"\\u003c\\u003e\\u0026\"}"

This behavior can be changed with the escape_html_entities option, or the global escape_html_entities_in_json configuration option.

ActiveSupport::JSON.encode({ key: "<>&" }, escape_html_entities: false)
# => "{\"key\":\"<>&\"}"

For performance reasons, you can set the escape option to false, which will skip all escaping:

ActiveSupport::JSON.encode({ key: "\u2028<>&" }, escape: false)
# => "{\"key\":\"\u2028<>&\"}"
Also aliased as: dump
๐Ÿ“ Source code
# File activesupport/lib/active_support/json/encoding.rb, line 46
      def encode(value, options = nil)
        if options.nil? || options.empty?
          Encoding.encode_without_options(value)
        else
          Encoding.json_encoder.new(options).encode(value)
        end
      end
๐Ÿ”Ž See on GitHub

json_encoder=(encoder)

๐Ÿ“ Source code
# File activesupport/lib/active_support/json/encoding.rb, line 206
        def json_encoder=(encoder)
          @json_encoder = encoder
          @encoder_without_options = encoder.new
        end
๐Ÿ”Ž See on GitHub

load(json, options = {})

Alias for: decode

parse_error()

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
๐Ÿ“ Source code
# File activesupport/lib/active_support/json/decoding.rb, line 45
      def parse_error
        ::JSON::ParserError
      end
๐Ÿ”Ž See on GitHub