Json.dump是否有输出Array的替代方案



我正在创建一个PUT请求,它需要在负载中发送一个JSON对象Array。我已经将数据放入一个数组中,并确认它是array类,但当它作为参数提供给Json.dump((时,它被输出为字符串对象,这会导致500内部服务器错误,有没有其他方法可以推送数据,使其保持原始格式?

def call_api
url = URI("url.zendesk.com/api/v2/macros/update_many")
https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = "Basic ="
request["Content-Type"] = "application/json"
request.body = JSON.dump(@data) #outputs a string, should be a json array
response = https.request(request)
end

回复=>#<Net::HTTPInternalServerError 500 Internal Server Error readbody=true>

。。。但当它作为参数提供给Json.dump((时,它会作为字符串对象输出

根据定义,JSON是一个字符串。它获取数据并将其转换为字符串,然后再将其转换回数据。这就是序列化。所以这部分很好。

您可能需要在您的URL中添加一个方案,如https。Net::HTTP的较新版本甚至不会接受没有方案的URI。这可能是500错误的来源。

查看API文档,正确的URL以.json结尾。

url = URI("https://url.zendesk.com/api/v2/macros/update_many.json")

它不接受数组,而是接受这样的对象。如果格式错误,将导致400错误的请求。

@data = {
"macros": [
{
"active": false,
"id": 25
},
{
"id": 23,
"position": 5
}
]
}

最后,有一个官方的ZendeskRuby API客户端,它可能更容易使用。

相关内容

最新更新