0

コントローラーファイルに次の関数があり、文字列があり、JSON.parse を使用して解析しようとしています。私が直面している問題は、返されるハッシュに存在するメッセージの値を出力できないことです。

def index
  .........  
  r = '{"response":"{\"message\":\"The following page was successfully Created 3035\",\"success\":\"0\",\"page_id\":\"3035\"}"}'
  @hash = JSON.parse(r)
  respond_to do |format|
  format.html
  end    
end

私のビューファイルでは、次のコードを使用しています

<%= @hash['response']['message'] %>

The following page was successfully Created 3035 を取得する代わりに、 メッセージを取得しています。

コントローラーファイルに「require json」があります。

私が行った場合

<%= @hash['response'] %>

次に、ハッシュ全体を取得します。助けてください

4

3 に答える 3

2

JSON 文字列がオフに見えます。これには基本的に単一のキーと値のペアが含まれており、キーは でresponseあり、残りはStringエスケープされたように見えるものを含む JSON です。

"{\"message\":\"The following page was successfully Created 3035\",\"success\":\"0\",\"page_id\":\"3035\"}"

言い換えれば、あなたが見ている行動は、あなたが与えている入力を考えると予想されるものです.

JSON 入力を次のように変更した場合 (つまり、値がresponseJSON でエンコードされた文字列として指定されていないことを確認します):

r = '{"response":{"message":"The following page was successfully Created 3035","success":"0","page_id":"3035"}}'

期待通りに動くと思います。

@hash['response']['message']返品"message"の理由@hash['response']String. パラメータを指定して に送信[]するStringと、受信者で発生した場合にStringパラメータが返されます。StringString

"foobar"["bar"] #=> "bar"
"foobar"["baz"] #=> nil

詳しくString#[]は をご覧ください。

于 2013-10-07T11:02:27.023 に答える