我正在开发一个新的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对象,以便我可以在我的控制器中使用它?
感谢。
答案 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。