我的控制器文件中有以下函数,我有一个字符串,我正在尝试使用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'] %>
然后我得到了整个哈希。请帮助
答案 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'] %>