2011-08-26 18 views
36

私は可変messagesに格納着信データを有する:JSONオクテットとは何ですか。なぜ2つの必須の要素がありますか?

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

変数messagesがJSONでフォーマットされています。次に、私はこれを実行します:

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

ほとんどの場合、これが動作します。すべての今、もう一度、私はこのエラーメッセージを取得:

A JSON text must at least contain two octets! 

エラーメッセージが、その後の行にJSON.parse(messages)['data']

  1. を指しオクテットは何ですか?

  2. JSONテキストに少なくとも2つのオクテットが含まれている必要があるのはなぜですか?

  3. messagesに2つのオクテットがないたびにコードが破損しないようにするにはどうすればよいですか?

ありがとう!

答えて

45
  1. オクテットは8ビットのグループです。現在、オクテットはバイトと同義ですが、バイトは歴史的にビットの「ネイティブ」グループと呼ばれ、4,6,7、または8ビットを意味する可能性があります。
  2. JSONテキストは、JSONドキュメントの最上位構造が配列またはオブジェクトであり、その最短表現がそれぞれ[]および{}であるため、少なくとも2オクテットを含む必要があります。
  3. messagesを確認してください。これはおそらく空でも、設定されていないか、またはのような1桁の数字で構成されています。これはではなく、の有効なJSONですが、多くのJSON実装で受け入れられます。
6

私は完全に私の場合、私は有効なJSON文字列を持っていたが、まだJSON.parseしようとすると、エラーメッセージ「JSONテキストは、少なくとも2つのオクテットを含んでいなければならない」受信して、他の回答に同意しながら。

私の問題は、コンテンツタイプをapplication/jsonに指定していないことでした。私がそれを追加すると、エラーなしでJSON.parseが働いた。

これは他の人に役立つことを願っています。

+1

スティーブン、これは私が必要とするものです!どこに "application/json"という行を追加しましたか? – Casey

関連する問題