Что такое октет JSON и почему требуются два? - PullRequest
37 голосов
/ 26 августа 2011

У меня есть входящие данные, которые я храню в переменной messages:

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 должен содержать по крайней мере два октета?

  3. Как я могу предотвратить взлом моего кода каждый раз, когда messages не имеетдва октета?

Спасибо!

Ответы [ 2 ]

48 голосов
/ 26 августа 2011
  1. Октет - это группа из 8 битов. Сегодня октет является синонимом байта, но исторически байт относится к любой «нативной» группе битов, что может означать 4,6,7 или 8 бит.
  2. Текст JSON должен содержать не менее двух октетов, поскольку структура верхнего уровня документа JSON представляет собой массив или объект, и кратчайшие представления из них - [] и {} соответственно.
  3. Проверьте значение messages. Вероятно, он пуст, не задан или состоит из одной цифры (например, 4), которая не допустимый JSON, но принята многими реализациями JSON.
6 голосов
/ 15 июля 2015

Хотя я полностью согласен с другим ответом, в моем случае у меня была допустимая строка JSON, но я все еще получал сообщение об ошибке «Текст JSON должен содержать как минимум два октета» при попытке JSON.parse.

Моя проблема заключалась в том, что я не указывал тип контента application/json. Как только я добавил это, JSON.parse работал без ошибок.

Надеюсь, это поможет кому-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...