Ruby получает размер в байтах массива

Я хотел бы получить размер в байтах содержимого массива (элементов) в ruby.

Я заполняю свой массив следующим образом:

  @records.each do |record|
    items << { :table => table, :id => record.id, :lruos => record.updated_at }
  end

На самом деле, я хочу принудительно отправить Content-Length этого массива, когда я сериализую его в JSON:

respond_to do |format|
  #response['Content-Length'] = items.to_s.size
  format.json { render :json => { :success => "OK", :items => items } }
end

Поэтому любая идея сделать это может быть интересной. (по какой-то причине я не знаю, что длина контента не отправлена, поэтому я хочу ее принудительно)

Я использую Rails 3.0.5.

Ответ 1

Как и WTP, вы, вероятно, намерены вернуть размер представления JSON вместо рубинового представления массива, поскольку JSON является фактическим ответом на браузер. Вы можете сделать это, предварительно закодировав (получив строку), а затем проверив его размер.

response['Content-Length'] = ActiveSupport::JSON.encode(items).size

Подробнее о сериализации и рельсах JSON

Ответ 2

Для тех, кому все еще интересно - я нашел, что это работает

ActiveSupport::JSON.encode(items).size.to_s

Который в течение многих лет спустя может кому-то помочь.