【问题标题】:How to access JSON in Rails?如何在 Rails 中访问 JSON?
【发布时间】:2015-01-30 21:37:33
【问题描述】:

我有以下 JSON 参数。

Started POST "/tickets/move.json" for ::1 at 2015-01-30 15:30:13 -0600
Processing by TicketsController#move as JSON
  Parameters: {"_json"=>[{"id"=>"1", "col"=>1, "row"=>1}, {"id"=>"2", "col"=>2, "row"=>2}, {"id"=>"3", "col"=>2, "row"=>1}, {"id"=>"4", "col"=>4, "row"=>1}, {"id"=>"5", "col"=>5, "row"=>1}], "ticket"=>{}}

如何访问它们,就像使用常规 rails 参数一样?

【问题讨论】:

    标签: ruby-on-rails json


    【解决方案1】:

    这是一个常规的 params 哈希。 Rails 通常足够聪明地解码 JSON 请求并将生成的对象放入 params 中,而 hashrockets (=>) 是一个死的赠品,它是一个 Ruby 哈希而不是 JSON。格式更好,看起来像这样:

    { "_json"  => [ { "id" => "1", "col" => 1, "row" => 1 },
                    { "id" => "2", "col" => 2, "row" => 2 },
                    # ...
                  ],
      "ticket" => {}
    }
    

    您将像访问任何其他哈希一样访问它:

    p params["_json"]
    # => [ {"id"=>"1", "col"=>1, "row"=>1},
    #      {"id"=>"2", "col"=>2, "row"=>2},
    #      ...
    #    ]
    
    p params["_json"][0]
    # => {"id"=>"1", "col"=>1, "row"=>1}
    
    p params["_json"][0]["id"]
    # => "1"
    
    p params["ticket"]
    # => {}
    

    实际上应该是一个 HashWithIndifferentAccess,所以你应该也可以使用符号键:

    p params[:_json][0][:id]
    # => "1"
    

    【讨论】:

    • Rails 自动处理 JSON 数据并将其映射到对象中,这很好。 params["_json"] 完美运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多