将 Hash 转换为 ruby 中的特定字符串格式

Convert Hash to specific string format in ruby

我想将哈希值:{"key1"=>"value1", "key2"=>"value2"} 转换成如下所示的字符串:'[{"key1" : "value1","key2" : "value2"}]'

背景:我正在从我的 rails 控制器进行 API 调用。 此请求的 curl 等价物是 curl -X POST -H 'Content-Type: application/json' -i 'valid_uri' --data '[{"key1" : "value1","key2" : "value2"}]'

因此,为了在 ruby 中转换它,我尝试了以下操作:

require 'net/http'
require 'uri'
require 'json'

uri = URI.parse(VALID_URI)
header = {'Content-Type' => 'application/json'}
data = {"key1"=>"value1", "key2"=>"value2"}
http = Net::HTTP.new(uri.host, uri.port)
request = Net::HTTP::Post.new(uri.request_uri, header)
request.body = Array.wrap(data1.to_s.gsub('=>',':')).to_s
response = http.request(request)

然而,request.body 的格式与 curl 请求中的数据格式不匹配,导致 Net::HTTPBadRequest 400 Bad Request

有人可以解释一下我怎样才能做到这一点吗? TIA

只需使用 json 模块:

require "json"
h=[{"key1"=>"value1", "key2"=>"value2"}]
string=h.to_json # => [{"key1":"value1","key2":"value2"}]