【问题标题】:How can I post JSON data with curl and use it in RoR?如何使用 curl 发布 JSON 数据并在 RoR 中使用它?
【发布时间】:2012-09-14 23:52:05
【问题描述】:

我正在构建一个 iOS 应用,它需要发布到 RoR API。

为了测试 POST,我正在运行这个命令:

curl -d @/tmp/data localhost:3000/api/ratings

其中 /tmp/data 包含一个哈希数组:

[    {        "uid": "gilt_162929239",        "rate": 1    }   ]

在 Ruby 中,参数如下所示:

[1] pry(#<Api::PromotionRatingsController>)> params
=> {"    {        \"uid\": \"good_162929239\",        \"rate\": 1    }   "=>nil,
 "format"=>"json",
 "action"=>"create",
 "controller"=>"api/ratings"}

我如何让 Rails 为我创建哈希数组以迭代每个?

编辑:我发现我缺少标题。

添加到 curl 命令行:

--header "Accept: application/json" --header "Content-type: application/json"

现在,这是我的参数:

[1] pry(#<Api::PromotionRatingsController>)> params
=> {"_json"=>[{"uid"=>"good_162929239", "rate"=>1}],
 "format"=>"json",
 "action"=>"create",
 "controller"=>"api/ratings",
 "promotion_rating"=>{"_json"=>[{"uid"=>"good_162929239", "rate"=>1}]}}

还是不对。

【问题讨论】:

  • 不是 ruby​​ 开发人员,但通常您会解码该 json 字符串,然后将其转换为本机数据结构。然后,您可以像使用任何其他本机结构一样使用宿主语言的数组/对象/散列/任何操作工具。
  • 在 RoR IIRC 中,它应该自动将 JSON 数据转换为本机对象。但这不会发生在我身上。
  • 再一次,我偶尔会在 RoR 上工作,所以没有发布这个作为答案。您可以从 params 哈希中提取 JSON 字符串,将其分配给一个对象,然后按照本文中的说明使用 json gem 吗? stackoverflow.com/questions/7964282/convert-json-to-ruby-hash.

标签: ios ruby-on-rails json


【解决方案1】:

根据this

如果您在初始化程序中打开了 config.wrap_parameters 或 在你的控制器中调用 wrap_parameters,你可以安全地省略 JSON/XML 参数中的根元素。参数将被克隆 并默认根据你的控制器名称包装在密钥中。

所以,我猜你要么需要包含一个根元素,要么设置config.wrap_parameters

【讨论】:

    猜你喜欢
    • 2015-05-05
    • 1970-01-01
    • 2012-06-20
    相关资源
    最近更新 更多