【问题标题】:How to return JSON in ruby?如何在 ruby​​ 中返回 JSON?
【发布时间】:2013-05-01 18:42:12
【问题描述】:

如果我输入,在 rails 控制台中:

User.all.to_json

我得到以下返回。

"[{\"created_at\":\"2013-04-29T23:10:36Z\",\"email\":\"test@test.com\",\"id\":2,\"updated_at\":\"2013-04-29T23:10:36Z\"},{\"created_at\":\"2013-03-18T04:53:42Z\",\"email\":\"sharataka@gmail.com\",\"id\":1,\"updated_at\":\"2013-05-01T12:03:01Z\"}]"

将其复制/粘贴到 http://jsonviewer.stack.hu/ 并尝试将其视为 JSON 时,我收到一条错误消息,提示“无效的 JSON 变量”。我相信这是因为 '\' 字符。有关如何解决此问题的任何建议?

【问题讨论】:

  • 什么是User.all 没有to_json
  • 如果您在控制台中执行此操作,输出包含多个引号和反斜杠是“正常的”,请在控制台中尝试puts User.all.to_json
  • @MrYoshiji 你想写一个答案,我会接受吗?
  • 哦,太好了,马上就搞定
  • 这个问题有什么意义呢?在 Rails 中,您将 json 呈现给客户端,这就是它是否有效的关键。

标签: ruby-on-rails json


【解决方案1】:
  • to_json 返回带有转义引号等的 JSON 字符串。
  • as_json 将其作为实际 JSON 返回,这将正确验证。

您使用哪种取决于您的渲染方式。

【讨论】:

  • 我尝试使用 as_json,但现在它有 '=>' 并且我仍然收到同样的错误,说它不是有效的 JSON 变量。
  • @sharataka 正如我所说,这取决于您如何渲染它。如果您使用 puts 或将其作为字符串发送到浏览器,则 to_json 很好。如果你使用的是普通的 Rails JSON 渲染,你会使用as_json
【解决方案2】:

如果您在控制台中执行此操作,则输出包含多个引号和反斜杠是“正常的”。

在我的 irb 控制台中:

irb(main):009:0> Patient.first.to_json
#=> "{\"patient\":{\"created_at\":\"2013-03-14T16:53:52-04:00\",\"id\":6538,\"updated_at\":\"2013-03-14T16:53:52-04:00\"}}"

但是使用puts的方法:

irb(main):010:0> puts Patient.first.to_json
{"patient":{"created_at":"2013-03-14T16:53:52-04:00","id":6538,"updated_at":"2013-03-14T16:53:52-04:00"}}
#=> nil

【讨论】:

    猜你喜欢
    • 2019-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多