{“email”上的MultiJson :: DecodeError意外令牌:“foo@bar.com”}

时间:2012-02-17 20:03:21

标签: ruby-on-rails ruby json api callback

我正在开发一个新的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 个答案:

答案 0 :(得分:2)

穿戴 Gemfile中的gem'yajl-ruby' 要求'yajl / json_gem'config / application.rb

答案 1 :(得分:2)

在gem文件声明中  宝石'yajl-ruby'  它用于将多个JSON对象与流或字符串连续解析和编码。

并在application.rb中要求'yajl / json_gem'

答案 2 :(得分:1)

将元素放入括号:

   [{"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"}]`

答案 3 :(得分:0)

无法通过在Rails shell中使用ActiveSupport :: JSON.decode和MultiJson.decode复制并粘贴错误消息令牌来重现您的问题。 Rails 3.2.1

还有其他线索吗?

答案 4 :(得分:-1)

此问题可能是由于ISO-8859-1中编码的响应正文而非UTF-8。客户端可能的修复方法是使用ruby'iconv'编码方法将其转换回UTF-8。