2011-08-26 22 views
36

que tienen los datos de entrada, que guardo en una variable messages:¿Qué es un octeto JSON y por qué son necesarios dos?

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

La variable messages tienen el formato JSON. Luego ejecuto esto:

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

La mayoría de las veces esto funciona. De vez en cuando, me sale este mensaje de error:

A JSON text must at least contain two octets! 

Ese mensaje de error a continuación, se refiere a la línea JSON.parse(messages)['data']

  1. ¿Qué es un octeto?

  2. ¿Por qué el texto JSON debe contener al menos dos octetos?

  3. ¿Cómo evito que mi código se rompa cada vez que messages no tiene dos octetos?

Gracias!

Respuesta

45
  1. Un octeto es un grupo de 8 bits. Hoy en día, octeto es sinónimo de byte, pero byte históricamente se refería a cualquier agrupación "nativa" de bits, y eso podría significar 4,6,7 u 8 bits.
  2. El texto JSON debe contener al menos dos octetos porque la estructura de nivel superior de un documento JSON es una matriz u objeto, y las representaciones más cortas son [] y {}, respectivamente.
  3. Compruebe el valor messages. Probablemente esté vacío, sin configurar o conste de un solo dígito (como 4), que es no JSON válido, pero aceptado por muchas implementaciones JSON.
6

Si bien estoy totalmente de acuerdo con la otra respuesta, en mi caso, tuve una cadena válida JSON pero todavía estaba recibiendo el "texto JSON debe contener al menos dos octetos" mensaje de error al intentar JSON.parse.

Mi problema era que no estaba especificando el tipo de contenido de application/json. Una vez que agregué eso, JSON.parse funcionó sin error.

Espero que esto ayude a alguien más.

+1

Stephen, esto es exactamente lo que necesito! ¿Dónde agregaste la línea "application/json"? – Casey

Cuestiones relacionadas