модуль ActiveSupport::JSON
Константы
- DATETIME_REGEX
- DATE_REGEX
-
соответствует датам в формате YAML
Атрибуты
Если значение равно true, символы >, <, & кодируются в виде экранированных последовательностей Unicode (например, > как u003e) в целях безопасности.
Если значение равно true, LINE SEPARATOR (U+2028) и PARAGRAPH SEPARATOR (U+2029) кодируются в виде экранированных последовательностей Unicode (‘u2028’ и ‘u2029’). Исторически эти символы нельзя было использовать в строках JavaScript, но это изменилось в ECMAScript 2019. Поэтому в современных браузерах это больше не вызывает проблем: caniuse.com/mdn-javascript_builtins_json_json_superset.
Задает кодировщик, который Rails использует для кодирования объектов Ruby в строки JSON в +Object#to_json+ и ActiveSupport::JSON.encode.
Задает точность кодируемых значений времени. По умолчанию — 3 (что соответствует точности до миллисекунд)
Если значение равно true, для дат и времени используется формат ISO 8601. В противном случае используется устаревший формат Active Support.
Открытые методы класса
# 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 Разбирает строку JSON (JavaScript Object Notation) и преобразует ее в объект Ruby. Дополнительную информацию см. на сайте www.json.org.
ActiveSupport::JSON.decode("{\"team\":\"rails\",\"players\":\"36\"}")
# => {"team" => "rails", "players" => "36"}
ActiveSupport::JSON.decode("2.39")
# => 2.39
# 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 (JavaScript Object Notation). Дополнительную информацию см. на сайте www.json.org.
ActiveSupport::JSON.encode({ team: 'rails', players: '36' })
# => "{\"team\":\"rails\",\"players\":\"36\"}"
По умолчанию создается JSON, безопасный для включения в JavaScript, поскольку символы U+2028 (Line Separator) и U+2029 (Paragraph Separator) экранируются:
ActiveSupport::JSON.encode({ key: "\u2028" })
# => "{\"key\":\"\\u2028\"}"
По умолчанию также создается JSON, безопасный для включения в HTML, поскольку экранируются <, > и &:
ActiveSupport::JSON.encode({ key: "<>&" })
# => "{\"key\":\"\\u003c\\u003e\\u0026\"}"
Это поведение можно изменить с помощью параметра escape_html_entities или глобального параметра конфигурации escape_html_entities_in_json.
ActiveSupport::JSON.encode({ key: "<>&" }, escape_html_entities: false)
# => "{\"key\":\"<>&\"}"
Для повышения производительности можно установить для параметра escape значение false, чтобы отключить все экранирование:
ActiveSupport::JSON.encode({ key: "\u2028<>&" }, escape: false)
# => "{\"key\":\"\u2028<>&\"}"
# File activesupport/lib/active_support/json/encoding.rb, line 229 def json_encoder=(encoder) @json_encoder = encoder @encoder_without_options = encoder.new @encoder_without_escape = encoder.new(escape: false) end
# File activesupport/lib/active_support/json/decoding.rb, line 45 def parse_error ::JSON::ParserError end
Возвращает класс ошибки, которая будет вызвана при ошибке декодирования JSON. Использование этого метода позволяет не зависеть напрямую от реализации JSON в ActiveSupport на случай, если она изменится в будущем.
begin
obj = ActiveSupport::JSON.decode(some_string)
rescue ActiveSupport::JSON.parse_error
Rails.logger.warn("Attempted to decode invalid JSON: #{some_string}")
end
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.