- D
- E
- J
- L
- P
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. |
[RW] | escape_js_separators_in_json | If true, encode LINE SEPARATOR (U+2028) and PARAGRAPH SEPARATOR (U+2029) as escaped unicode sequences (‘u2028’ and ‘u2029’). Historically these characters were not valid inside JavaScript strings but that changed in ECMAScript 2019. As such it’s no longer a concern in modern browsers: caniuse.com/mdn-javascript_builtins_json_json_superset. |
[R] | json_encoder | Sets the encoder used by Rails to encode Ruby objects into |
[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 = {}) Link
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
encode(value, options = nil) Link
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<>&\"}"
# File activesupport/lib/active_support/json/encoding.rb, line 47 def encode(value, options = nil) if options.nil? || options.empty? Encoding.encode_without_options(value) elsif options == { escape: false }.freeze Encoding.encode_without_escape(value) else Encoding.json_encoder.new(options).encode(value) end end
json_encoder=(encoder) Link
parse_error() Link
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