2016-11-09 82 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}"