2

RailsコンソールからRailsアクションの1つにアクセスしています。

> @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
}

なぜこれが文字列として伝わってくるのでしょうか?Rails3.2.0とRuby1.9.3を使用しています。

4

2 に答える 2

3

HTTPリクエストから常に文字列を取得します。render :jsonハッシュをJSON文字列に変換するだけです。

あなたJSON.parseは文字列で行う必要があります。

于 2012-12-26T12:34:49.920 に答える
2

HTTPメッセージ全体が文字列ベースであるため、JSONを返します。JSON.parseしたがって、コンソールでJSONオブジェクトを取得するには、応答本文を呼び出す必要があります。

JSON.parse(http.request(request).body) # => {
#    first_thing: x,
#    second_thing: x,
#    third_thing: x
#}
于 2012-12-26T12:36:37.623 に答える