【问题标题】:MultiJson::DecodeError unexpected token at {"email":"foo@bar.com"}{"email":"foo@bar.com"} 处的 MultiJson::DecodeError 意外令牌
【发布时间】:2012-02-17 20:03:21
【问题描述】:

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

谢谢。

【问题讨论】:

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


    【解决方案1】:

    放 Gemfile 中的 gem 'yajl-ruby' 和 需要'yajl/json_gem' config/application.rb

    【讨论】:

    • 这行得通,但我不明白为什么我首先会收到错误!
    【解决方案2】:

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

    并且在 application.rb 中需要 'yajl/json_gem'

    【讨论】:

      【解决方案3】:

      将元素放在括号中:

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

      【讨论】:

        【解决方案4】:

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

        还有其他线索吗?

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-10-01
            • 2014-10-13
            • 1970-01-01
            • 1970-01-01
            • 2021-03-19
            相关资源
            最近更新 更多