【问题标题】:JSON date string parse error in RailsRails中的JSON日期字符串解析错误
【发布时间】:2014-12-13 03:34:40
【问题描述】:

我在 Rails 应用程序中有一个大型数据模型,我正在尝试使其可序列化并输出到 JSON。我在模型上定义了#serializable_hash 方法并将一些属性列入黑名单。我的目标是将控制器层上的属性列入白名单,以接受相同的结构,并简单地忽略我不希望“可访问”的值。

当我PUT update 使用上述 JSON 时,一个这样的属性给我带来了麻烦。解析请求参数时出错:

SyntaxError (/Users/brad/.rvm/gems/ruby-1.9.3-p194@project-rails32/gems/actionpack-3.2.13/lib/action_dispatch/http/request.rb:261: syntax error, unexpected tINTEGER, expecting $end
...02933", "software_date"=>"09/05/14", "software_version"=>"10...
...                               ^):
# stack trace...

就 Rails 而言,这只是一个字符串,对吧?为什么这里期望输入结束?作为记录,在提交我的请求之前删除此属性会导致更新成功,所以我确定这是导致问题的原因。

【问题讨论】:

    标签: ruby-on-rails json


    【解决方案1】:

    原来我是世界上最倒霉的人。

    熟悉 Ruby 的%Q() 方法,你就会明白我在哪里。

    在我非常 非常 的具体情况下,当 Rails 解析请求的参数时:

    1. JSON 格式
    2. 有一个到数组的键映射
    3. 并且该数组下的任何值包含一个'/'

    解析将失败。为什么?

    我的 Rails 版本 (3.2.13) 在解析 params 哈希的参数时使用 AwesomePrint 库版本 0.3.2。 The #grep method 该版本的 gem 使用以下方法评估匹配:

    %Q/#{match}/
    

    仅仅因为指定的分隔符是'/',评估失败并解析崩溃。不要让这种事情发生在你身上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-10
      • 1970-01-01
      相关资源
      最近更新 更多