2012-02-11 19 views
10

Vorrei ottenere la dimensione in byte del contenuto di un array (elementi) in ruby.Ruby ottiene la dimensione in byte di un array

riempio il mio allineamento in questo modo:

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

In realtà, voglio forzare l'invio del Content-Length di questo array quando ho serializzare in JSON:

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

Quindi, qualsiasi idea per fare questo potrebbe essere interessante. (per una ragione non so che la lunghezza del contenuto non viene inviata, quindi voglio forzarla)

Io uso Rails 3.0.5.

+1

Perché non preferibilmente prima serializzarlo e quindi ottenere la dimensione della stringa serializzata? Il JSON serializzato è probabilmente più grande della matrice, quindi il tuo approccio non funzionerebbe. –

risposta

7

Come WTP ha detto, probabilmente si intende restituire la dimensione della rappresentazione JSON anziché la rappresentazione ruby ​​dell'array, poiché JSON è la risposta effettiva al browser. Puoi farlo codificando in anticipo (producendo una stringa) e verificandone le dimensioni.

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

More about JSON serialization and rails

+0

Capisco quello che hai detto e il modo di serializzare, ma aggiungendo la tua linea, ho questo errore: Errore di lettura: #

+0

Il problema è la" dimensione ". Ho provato con "length" ma lo stesso errore. –

+0

Hm, non sono sicuro del perché stia succedendo. Puoi costruire un hash di record e serializzarlo nella console di Rails? ActivSupport :: JSON dovrebbe essere in grado di serializzare praticamente qualsiasi cosa - gestisce tutti gli oggetti e le primitive di Rails, e dovrebbe anche chiamare to_s su oggetti che non hanno to_json. Puoi provare a serializzare singoli campi dell'hash (cioè codificare (record.updated_at), codificare (tabella), codificare (record.id) ecc. Fino a trovare un errore - allora sai cosa non è supportato. –

1

Per coloro che stanno ancora chiedendo - Ho trovato questo lavoro

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

Quali mentre i suoi molti anni più tardi - possono aiutare qualcuno.

Problemi correlati