我正在創建一個 PUT 請求,它需要在有效負載中發送一個 JSON 物件陣列。我已經將資料放入一個陣列中,并確認它是 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>
uj5u.com熱心網友回復:
...但是當它作為引數提供給 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 Bad Request。
@data = {
"macros": [
{
"active": false,
"id": 25
},
{
"id": 23,
"position": 5
}
]
}
最后,有一個官方的 Zendesk Ruby API 客戶端,它可能更易于使用。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/364012.html
