2016-11-09 71 views
0

我正在渲染对来自webhook的POST请求的响应。我刚刚意识到,当我render json: thingee和我登录thingee它有哈希火箭是不是有效的json。哈希火箭vs冒号渲染json:

我见过人们puts哈希,它看起来不错,但是这不是我在做什么,我渲染一个散列作为JSON响应后..

在呈现时,我哈希是这样的:

{"rates"=>[{"service_name"=>"Standard", "service_code"=>"f48", 
"total_price"=>"390",},{"service_name"=>"Expedited", "service_code"=>"f34", 
"total_price"=>"640"}]} 

但我需要它是有效的JSON,看起来像这样:

{"rates":[{"service_name":"Standard", "service_code":"f48", 
"total_price":"390",},{"service_name":"Expedited", "service_code":"f34", 
"total_price":"640"}]} 

感谢

+0

如果您想查看'thingee'的JSON表示,您可以执行'puts thingee.to_json'。 'render json'会返回一个JSON字符串给浏览器,但是当你执行'放入thingee'时,你会看到一个Hash对象的字符串表示 – james246

回答

1

别担心。它非常好。

在Ruby中的hashrocket语法需要使用时,你想有一个哈希键不是一个符号:

irb(main):002:0> { foo: 1, 'baz': 2 } 
=> {:foo=>1, :baz=>2} # coerces 'baz' into a symbol 
irb(main):003:0> { foo: 1, 'baz' => 2 } 
=> {:foo=>1, "baz"=>2} 

但是当你通过哈希render: { json: @foo }的哈希值传递给JSON.generate其将红宝石哈希到有效的JSON。

irb(main):006:0> JSON.generate({ "foo" => 1, "baz" => 2 }) 
=> "{\"foo\":1,\"baz\":2}" 
irb(main):007:0> JSON.generate({ foo: 1, baz: 2 }) 
=> "{\"foo\":1,\"baz\":2}" 
irb(main):008:0> { foo: 1, baz: 2 }.to_json 
=> "{\"foo\":1,\"baz\":2}"