2012-02-11 3 views
10

ruby​​で配列の内容(バイト数)をバイト単位で取得したいと考えています。Rubyで配列のバイト数を取得する

私はこのように私の配列を埋める:実際には

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

、私は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

代わりに最初にシリアル化してからシリアル化された文字列のサイズを取得するのはなぜですか?シリアライズされたJSONはおそらく配列よりも大きいので、あなたのアプローチはうまくいかないでしょう。 –

答えて

7

WTPと同様に、JSON表現がブラウザの実際の応答であるため、配列のルビ表現の代わりにJSON表現のサイズを返すつもりです。これは、あらかじめエンコーディング(文字列を生成)してからサイズを確認することで可能です。誰かを助けるかもしれない - 私は、これはその多くの年後しばらく

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

を作用することが分かっ - まだ迷っているものについては

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

More about JSON serialization and rails

+0

あなたが言ったこととシリアル化する方法を理解していますが、私はこのエラーがあります:読み取りエラー:#

+0

を呼び出す問題は「サイズ」です。私は "長さ"でも同じエラーで試しました。 –

+0

うーん、なぜ起こっているのか分かりません。レコードのハッシュを構築し、それをRailsコンソールでシリアル化できますか? ActivSupport :: JSONはすべてのRailsオブジェクトとプリミティブを処理し、to_jsonを持たないオブジェクトのto_sも呼び出す必要があります。エラーを見つけるまで、ハッシュの個々のフィールドをシリアル化することができます(つまり、encode(record.updated_at)、encode(table)、encode(record.id)など)、サポートされていないものが分かります。 –

関連する問題