module ActiveSupport::JSON
Constants
- DATETIME_REGEX
- DATE_REGEX
-
matches YAML-formatted dates
Public Class Methods
Source
# File lib/active_support/json/decoding.rb, line 24 def decode(json) data = ::JSON.parse(json, quirks_mode: true) if ActiveSupport.parse_json_times convert_dates_from(data) else data end end
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
Source
# File lib/active_support/json/encoding.rb, line 40 def encode(value, options = nil) Encoding.json_encoder.new(options).encode(value) end
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\"}"
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 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\":\"<>&\"}"
Source
# File lib/active_support/json/decoding.rb, line 45 def parse_error ::JSON::ParserError end
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
Private Class Methods
Source
# File lib/active_support/json/decoding.rb, line 50 def convert_dates_from(data) case data when nil nil when DATE_REGEX begin Date.parse(data) rescue ArgumentError data end when DATETIME_REGEX begin Time.zone.parse(data) rescue ArgumentError data end when Array data.map! { |d| convert_dates_from(d) } when Hash data.transform_values! do |value| convert_dates_from(value) end else data end end