2011-08-26 14 views
36

Mam przychodzących danych, które należy przechowywać w zmiennej messages:Co to jest oktet JSON i dlaczego są wymagane dwie?

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

Zmienna messages jest sformatowany w formacie JSON. Następnie wykonuję to:

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

Najczęściej to działa. Co jakiś czas, otrzymuję komunikat o błędzie:

A JSON text must at least contain two octets! 

Ten komunikat o błędzie, a następnie odnosi się do linii JSON.parse(messages)['data']

  1. Co to oktet?

  2. Dlaczego tekst JSON musi zawierać co najmniej dwa oktety?

  3. Jak zapobiec złamaniu kodu za każdym razem, gdy messages nie ma dwóch oktetów?

Dzięki!

Odpowiedz

45
  1. Oktet to grupa 8 bitów. Obecnie oktet jest synonimem bajtu, ale bajt historycznie odwoływał się do dowolnego "natywnego" grupowania bitów, a to mogło oznaczać 4,6,7 lub 8 bitów.
  2. Tekst JSON musi zawierać co najmniej dwa oktety, ponieważ struktura najwyższego poziomu dokumentu JSON jest tablicą lub obiektem, a najkrótsze reprezentacje to odpowiednio: [] i {}.
  3. Sprawdź wartość messages. Jest on prawdopodobnie pusty, nieuzbrojony lub składa się z pojedynczej cyfry (np. 4), która jest , a nie prawidłowym JSON, ale akceptowana przez wiele implementacji JSON.
6

Podczas I całkowicie zgadzam się z inną odpowiedź, w moim przypadku miałem ważny JSON ciąg ale wciąż otrzymaniu „tekst JSON musi zawierać co najmniej dwa oktety” komunikat o błędzie podczas próby JSON.parse.

Mój problem polegał na tym, że nie określałem typu zawartości application/json. Gdy dodałem to, JSON.parse działało bezbłędnie.

Mam nadzieję, że to pomoże komuś innemu.

+1

Stephen, właśnie tego potrzebuję! Gdzie dodałeś linię "application/json"? – Casey