我正在回复来自webhook的POST
请求。我刚刚意识到,当我render json: thingee
并且我记录thingee
时,它的哈希火箭是无效的json。
我已经看到人们在puts
哈希的地方看起来很好,但这不是我正在做的事情,我在回复POST时将哈希渲染为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 :(得分:2)
在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,后者将ruby散列转换为有效的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}"