【问题标题】:Hash rocket vs colon in render json:渲染 json 中的哈希火箭与冒号:
【发布时间】:2017-03-23 14:48:19
【问题描述】:

我正在呈现对来自 webhook 的 POST 请求的响应。我刚刚意识到,当我 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"}]}

谢谢

【问题讨论】:

  • 如果您想查看thingee 的JSON 表示,您可以使用puts thingee.to_jsonrender json 将向浏览器返回一个 JSON 字符串,但是当您执行 puts thingee 时,您会看到 Hash 对象的字符串表示

标签: ruby-on-rails json api hash


【解决方案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,它将 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}"

【讨论】:

    猜你喜欢
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2015-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-04
    • 2021-10-20
    相关资源
    最近更新 更多