无法使用函数JSON.parse在rails上解析ruby中的JSON

时间:2013-10-07 10:48:54

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

我的控制器文件中有以下函数,我有一个字符串,我正在尝试使用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'] %>

我得到的输出是 的消息 而不是得到 以下页面已成功创建3035

我要求json&#39;在我的控制器文件上。

如果我这样做

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

然后我得到了整个哈希。请帮助

3 个答案:

答案 0 :(得分:2)

JSON字符串关闭。它基本上包含一个键/值对,键为response,其余为String,包含看似要转义的内容JSON:

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

换句话说,根据您给出的输入,您所看到的行为是可以预期的。

如果您将JSON输入更改为(即确保response中的值未作为JSON编码的字符串给出):

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

我想它会像你期望的那样工作。

@hash['response']['message']返回"message"的原因是因为@hash['response']String。使用[]参数向String发送String会导致参数String在收件人String中出现时返回{/ 1}}:

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

有关详细信息,请参阅String#[]

答案 1 :(得分:0)

您似乎将错误的JSON字符串分配给r。 正确的字符串应如下所示:

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

与您的版本相比,它没有围绕响应内容的双引号,因此JSON.parse会返回一个具有您期望的正确值的哈希值:

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

答案 2 :(得分:0)

试试这个: -

def index
 r = '{"response":"{\"message\":\"The following page was successfully Created 3035\",\"success\":\"0\",\"page_id\":\"3035\"}"}'
 @hash = JSON.parse(r)
 @messagehash= JSON.parse(@hash['response')

 respond_to do |format|
    format.html
 end    
end

在您的视图中: -

 <%= @messagehash['message'] %>