2011-08-26 8 views
36

Ho dati in entrata, che ho memorizzare in una variabile messages:Che cos'è un ottetto JSON e perché sono richiesti due?

connection = ContextIO::Connection.new(key, secret) 
messages = connection.all_messages(:account => account, :limit => 100, :since => (Time.now - 3000.day)) 

La variabile messages è formattato in JSON. Quindi eseguo questo:

foo = JSON.parse(messages)['data'] 

La maggior parte delle volte funziona. Ogni tanto, ricevo questo messaggio di errore:

A JSON text must at least contain two octets! 

Questo messaggio di errore si riferisce quindi alla linea JSON.parse(messages)['data']

  1. Che cosa è un ottetto?

  2. Perché il testo JSON deve contenere almeno due ottetti?

  3. Come evitare di rompere il codice ogni volta che messages non ha due ottetti?

Grazie!

risposta

45
  1. Un ottetto è un gruppo di 8 bit. Oggi, l'ottetto è sinonimo di byte, ma il byte storicamente si riferisce a qualsiasi raggruppamento "nativo" di bit, e ciò potrebbe significare 4,6,7 o 8 bit.
  2. Il testo JSON deve contenere almeno due ottetti perché la struttura di livello superiore di un documento JSON è un array o un oggetto e le rappresentazioni più corte di tali sono [] e {}, rispettivamente.
  3. Verificare il valore messages. Probabilmente è vuoto, non impostato o costituito da una singola cifra (come 4), che è non JSON valido, ma accettato da molte implementazioni JSON.
6

Mentre Sono assolutamente d'accordo con l'altra risposta, nel mio caso ho avuto un JSON stringa valida, ma era ancora ricevendo il "testo JSON deve contenere almeno due ottetti" messaggio di errore quando si cerca di JSON.parse.

Il mio problema era che non stavo specificando il tipo di contenuto di application/json. Una volta aggiunto, JSON.parse ha funzionato senza errori.

Spero che questo aiuti qualcun altro.

+1

Stephen, questo è esattamente ciò di cui ho bisogno! Dove hai aggiunto la riga "application/json"? – Casey

Problemi correlati