MultiJson :: DecodeError неожиданный токен на {"email": "foo@bar.com"} - PullRequest
3 голосов
/ 18 февраля 2012

Я разрабатываю новое приложение Ruby on Rails 3.2.Это приложение будет получать периодический обратный вызов JSON со статистикой.Обратный звонок, который я получаю, не совсем действителен.Правила json разделены символами новой строки.

POST обратного вызова имеют заголовок типа содержимого application / json и содержат ровно одну строку JSON на строку, причем каждая строка представляет одно событие.Обратите внимание, что в настоящее время заголовки POST определяют этот пост как application / json, хотя это не так;каждая строка является допустимой строкой JSON, но общее тело POST - нет.Например:

Это пример обратного вызова:

{"email":"foo@bar.com","timestamp":1322000095,"unique_arg":"my unique arg","event":"delivered"}
{"email":"foo@bar.com","timestamp":1322000097,"unique_arg":"my unique arg","event":"click"}
{"email":"foo@bar.com","timestamp":1322000096,"unique_arg":"my unique arg","event":"open"}

Когда я получаю этот обратный вызов, мое приложение Rails аварийно завершает работу с «MultiJson :: DecodeError»

743: неожиданный токен в '{"email": "foo@bar.com", "timestamp": 1322000096, "unique_arg": "my unique arg", "event": "open"} '

Я думаю, что приложение обнаруживает заголовок application / json и пытается автоматически его проанализировать.Как я могу преобразовать это в действительный объект JSON, чтобы я мог использовать это в моем контроллере?

Спасибо.

Ответы [ 5 ]

2 голосов
/ 21 апреля 2012

Put gem 'yajl-ruby' в Gemfile и требуют 'yajl / json_gem' config / application.rb

2 голосов
/ 23 апреля 2012

В файле gem объявите gem 'yajl-ruby'. Он используется для непрерывного анализа и кодирования нескольких объектов JSON в потоки или строки и из них.

И требует 'yajl / json_gem' в application.rb

1 голос
/ 26 января 2013

Положите элементы в скобки:

   [{"email":"foo@bar.com","timestamp":1322000095,"unique_arg":"my unique arg","event":"delivered"},
    {"email":"foo@bar.com","timestamp":1322000097,"unique_arg":"my unique arg","event":"click"},
    {"email":"foo@bar.com","timestamp":1322000096,"unique_arg":"my unique arg","event":"open"}]`
0 голосов
/ 20 ноября 2012

Эта проблема, вероятно, связана с телом ответа, закодированным в ISO-8859-1 вместо UTF-8. Возможное исправление на стороне клиента - преобразовать его обратно в UTF-8, используя методы кодирования ruby ​​'iconv'.

0 голосов
/ 23 февраля 2012

Невозможно воспроизвести проблему, скопировав и вставив токен сообщения об ошибке, используя ActiveSupport :: JSON.decode и MultiJson.decode в оболочке Rails.Rails 3.2.1

Любые другие подсказки?

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