Module: ActiveSupport::JSON
| Relationships & Source Files | |
| Namespace Children | |
|
Modules:
| |
| Defined in: | activesupport/lib/active_support/json/decoding.rb, activesupport/lib/active_support/json/encoding.rb |
Constant Summary
-
DATETIME_REGEX =
# File 'activesupport/lib/active_support/json/decoding.rb', line 14/\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 =
# File 'activesupport/lib/active_support/json/decoding.rb', line 13
matches YAML-formatted dates
/\A\d{4}-\d{2}-\d{2}\z/
Class Method Summary
-
.decode(json, options = {})
(also: .load)
Parses a
JSONstring (JavaScript::ObjectNotation) into a Ruby object. -
.dump(value, options = nil)
Alias for .encode.
-
.encode(value, options = nil)
(also: .dump)
Dumps objects in
JSON(JavaScript::ObjectNotation). -
.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. - .convert_dates_from(data) private
Class Method Details
.convert_dates_from(data) (private)
[ GitHub ]# File 'activesupport/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
.decode(json, options = {}) Also known as: .load
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
# File 'activesupport/lib/active_support/json/decoding.rb', line 24
def decode(json, = {}) data = ::JSON.parse(json, ) if ActiveSupport.parse_json_times convert_dates_from(data) else data end end
.dump(value, options = nil)
Alias for .encode.
# File 'activesupport/lib/active_support/json/encoding.rb', line 56
alias_method :dump, :encode
.encode(value, options = nil) Also known as: .dump
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, = nil) if .nil? || .empty? Encoding.(value) elsif == { escape: false }.freeze Encoding.encode_without_escape(value) else Encoding.json_encoder.new().encode(value) end end
.load(json, options = {})
Alias for .decode.
# File 'activesupport/lib/active_support/json/decoding.rb', line 33
alias_method :load, :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
# File 'activesupport/lib/active_support/json/decoding.rb', line 45
def parse_error ::JSON::ParserError end