为什么这个Rails操作返回一个字符串而不是JSON?

时间:2012-12-26 12:31:19

标签: ruby-on-rails ruby-on-rails-3

我从Rails控制台访问我的一个Rails操作:

> @consumer = OAuth::Consumer.new(
>   x,
>   x,
>   site: "http://localhost:3000"
> )
> request = @consumer.create_signed_request(:get,"/get_user_info?email=x")
> uri = URI.parse("http://localhost:3000")
> http = Net::HTTP.new(uri.host, uri.port)
> http.request(request).body
=> "{\"first_thing\":\"Nick\",\"second_thing\":\"2012-12-26T11:41:11Z\",\"third_thing\":\"2012-12-26T11:40:03Z\"}"
> http.request(request).body.class
=> String

该操作应该返回JSON中的哈希值,而不是字符串。以下是行动结束的方式:

render json: {
    first_thing: x,
    second_thing: x,
    third_thing: x
}

为什么这会以字符串形式出现?我使用的是Rails 3.2.0和Ruby 1.9.3。

2 个答案:

答案 0 :(得分:3)

您将始终从HTTP请求中获取字符串。 render :json只是将哈希值转换为JSON字符串。

您需要对字符串执行JSON.parse

答案 1 :(得分:2)

它返回JSON,因为整个HTTP消息都是基于字符串的。因此,要在控制台中获取JSON对象,您需要在响应主体上调用JSON.parse

JSON.parse(http.request(request).body) # => {
#    first_thing: x,
#    second_thing: x,
#    third_thing: x
#}