【问题标题】:Line breaks in JSON string lost by Rails controllerRails 控制器丢失 JSON 字符串中的换行符
【发布时间】:2011-05-19 01:26:56
【问题描述】:

在这里碰到了一点砖墙。我正在尝试将包含换行符的字符串(\n,由 JSON.stringify 转换为 \u000a)作为 JSON 对象的一部分发送到 Rails 应用程序:

{"bob":{"id":46,"notes":"foo\u000abar\u000abaz"}}

这就像这样通过电线,\u000a 转义为 %5Cu000a:

http://localhost/bobs/46?draft=true&%7B%22bob%22%3A%7B%22id%22%3A46%2C%22notes%22%3A%22foo%5Cu000abar%5Cu000abaz%22%7D%7D=

但是当请求到达 Rubyland 时,换行符消失在一股以太中,变成了空格:

Processing Api::BobsController#update (for 127.0.0.1 at 2011-05-19 11:01:43) [PUT]
  Parameters: {"draft"=>"true", "action"=>"update", "id"=>"46", "controller"=>"api/bobs", "bob"=>{"notes"=>"foo bar baz", "id"=>46}

这不仅仅是一些日志记录工件,它们也会以这种方式进入数据库:

ree-1.8.7-2010.02 > Bob.find_by_id(46)
 => #<Bob id: 46, notes: "foo bar baz"...>

如果我发送例如。 “\\n”而不是“\n”,它们可以通过:

Processing Api::BobsController#update (for 127.0.0.1 at 2011-05-19 11:01:43) [PUT]
  Parameters: {"draft"=>"true", "action"=>"update", "id"=>"46", "controller"=>"api/bobs", "bob"=>{"notes"=>"foo\\nbar\\nbaz", "id"=>46}

发生了什么,为什么?

更新:一位同事模糊地回忆起听说Passenger 被怀疑丢弃了一些特殊字符,但他找不到支持这一点的参考,我也不能......?

【问题讨论】:

  • 你可以尝试转义换行符吗?
  • 应该是 \\n,显然你需要打入 \\\n 才能让它正确显示。
  • @Laas 是对的,json 应该放在帖子正文中
  • 2011 年 5 月 19 日 1:26 问,今天真的结束了吗?
  • @iGian 您可以为任何新问题或旧问题添加赏金。

标签: ruby-on-rails ruby json passenger line-breaks


【解决方案1】:

这可能没什么,但PUT 方法不应该在 RESTful Rails 中使用 POST'ed 吗? GET-ing 任何 URL 都应该是可重复的,无需对数据库进行任何更改。

如果您将 AJAX 调用更改为 post,您还可以指定正确的内容类型为 application/json,以便 Rails 知道如何处理它。

【讨论】:

  • 获取请求通常不会与正文一起发送,这样做永远不会有用。 POST/PUT/PATCH 更适合将 json 发送到服务器。 +1
猜你喜欢
  • 2012-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-21
  • 2014-05-31
  • 2017-04-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多