渲染 json 中的哈希火箭与冒号:

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"}]}
Run Code Online (Sandbox Code Playgroud)

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

{"rates":[{"service_name":"Standard", "service_code":"f48",
"total_price":"390",},{"service_name":"Expedited", "service_code":"f34", 
"total_price":"640"}]}
Run Code Online (Sandbox Code Playgroud)

谢谢

max*_*max 5

不要太担心。它完全没问题。

在 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}
Run Code Online (Sandbox Code Playgroud)

但是,当您传递散列时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}"
Run Code Online (Sandbox Code Playgroud)