Tod*_*ddT 2 api hash json ruby-on-rails
我正在呈现对POST来自 webhook的请求的响应。我刚刚意识到,当我render json: thingee和我记录thingee它时,它具有无效的 json 哈希火箭。
我已经看到人们puts在哪里哈希并且它看起来不错,但这不是我正在做的,我将哈希呈现为 JSON 以响应 POST..
渲染后,我的哈希如下所示:
{"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"}]}
谢谢
不要太担心。它完全没问题。
在 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}"