在轨道上的ruby中发送Json对象数组

时间:2017-08-30 04:45:25

标签: ruby-on-rails json ruby

我想在put请求体中发送一组JSON对象。

JSON正文:

[
 {
    "a":1,
    "b":2
 },
 {
    "a":2,
    "b":1
 }
]

我正在使用HTTP :: put来发出请求。我将Json中的数据作为哈希发送。

put("url", data: json)

但是,这会导致问题,因为在客户端它被解码为:

[
 "data":[{
    "a":1,
    "b":2
 },
 {
    "a":2,
    "b":1
 }]
]

如何在没有哈希的情况下发送Json,或者在发送之前有没有办法从哈希值中获取值?

2 个答案:

答案 0 :(得分:0)

尝试定义Content-Type

json_data = '[{"a":1,"b":2},{"a":2,"b":1 }]'
hash_body = JSON.parse json_data
uri = URI.parse('https://www.google.com/api/something')

request = Net::HTTP::Put.new(uri.request_uri, 'Content-Type' => 'application/json')
request.body = hash_body
response = http.request(request)

干杯!

答案 1 :(得分:0)

由于内部设置了一些参数,我们无法使用HTTP :: Put.new。我们通过在Her库中添加一个方法来解决它,而该方法又使用Faraday来发出请求。我发布了这里使用的方法。

      response = self.use_api.connection.put do |req|
        req.url url
        req.headers['Content-Type'] = 'application/json'
        req.body = json
      end

我不确定这是否是最好的方法。