我发送了一个帖子请求,这是有效载荷:
data = {updates: [{action: "create", user_id: "2", type: "view"}]}
但是当我发送它时,API说它期待:
{ action: \"create\", user_id: \"id\", type: \"type\" }
但它得到了:
{:action=\u003e\\\"create\\\", :user_id=\u003e2\\\"2\\\", :type=\u003e\\\"view\\\"}\
=>正在转换。我尝试使用to_json
,但这对我没有帮助。
如何正确转换?我认为它与嵌套数组/哈希有关,因为所有其他工作正常。
另外,我设置我的请求正文并发送如下:
request.set_form_data(body)
https.request(request)
看起来我需要使用这种语法才能将set_form_data传递给嵌套的哈希:
{'a[b]': 'c'}
与{'a' => {'b' => 'c'}}
但有没有办法包含数组?我需要:
data = {updates: [{action: "create", user_id: "2", type: "view"}]}
用这种表示法。
答案 0 :(得分:0)
正如您所提到的,set_form_data
不接受数组。如果您想继续使用Net::HTTP
库,则看起来像是一种解决方法,即对数据进行编码并将其传递给request.body
。
request.body = "updates[][action]=create&updates[][type]=view&updates[][user_id]=2"
request.content_type = 'application/x-www-form-urlencoded'
您还可以像在此帖子中一样创建自定义函数:http://cloudlines.tumblr.com/post/653645115/postput-arrays-with-ruby-nethttp-setformdata
查看有关将复杂对象更改为查询字符串的帖子:https://coderwall.com/p/uh8kiw/pass-arrays-objects-via-querystring-the-rack-rails-way。
希望有所帮助!