Spec-Zone.ru › Ruby on Rails 8.1

модуль ActiveSupport::JSON

Константы

DATETIME_REGEX
DATE_REGEX

соответствует датам в формате YAML

Атрибуты

escape_html_entities_in_json [RW]

Если значение равно true, символы >, <, & кодируются в виде экранированных последовательностей Unicode (например, > как u003e) в целях безопасности.

escape_js_separators_in_json [RW]

Если значение равно true, LINE SEPARATOR (U+2028) и PARAGRAPH SEPARATOR (U+2029) кодируются в виде экранированных последовательностей Unicode (‘u2028’ и ‘u2029’). Исторически эти символы нельзя было использовать в строках JavaScript, но это изменилось в ECMAScript 2019. Поэтому в современных браузерах это больше не вызывает проблем: caniuse.com/mdn-javascript_builtins_json_json_superset.

json_encoder [R]

Задает кодировщик, который Rails использует для кодирования объектов Ruby в строки JSON в +Object#to_json+ и ActiveSupport::JSON.encode.

time_precision [RW]

Задает точность кодируемых значений времени. По умолчанию — 3 (что соответствует точности до миллисекунд)

use_standard_json_time_format [RW]

Если значение равно true, для дат и времени используется формат ISO 8601. В противном случае используется устаревший формат Active Support.

Открытые методы класса

decode (json, options = {}) Показать исходный код
# 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
Также имеет псевдоним: load
dump (value, options = nil)
Псевдоним для: encode
encode (value, options = nil) Показать исходный код
# 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<>&\"}"
Также имеет псевдоним: dump
json_encoder= (encoder) Показать исходный код
# 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
load (json, options = {})
Псевдоним для: decode
parse_error () Показать исходный код
# 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API