是否有可输出JSON数组的JSON.dump替代方案以适配Zendesk API要求?
你对JSON.dump的行为存在误解:HTTP 请求的请求体本身仅支持传输字符串格式数据,JSON.dump() 将数组转为JSON格式字符串是完全符合要求的操作,这不是触发500错误的原因。问题大概率出在请求结构或者认证配置不符合接口要求,你可以从以下几个方向排查修复:
- 负载结构不符合接口要求:Zendesk 批量更新宏的接口不支持直接将数组作为根节点传参,需要在外层嵌套
macros字段,正确的结构为{"macros": [你的宏数据数组]} - 请求URL不完整:你当前填写的URL缺少
https://前缀,且需要替换为你自己的Zendesk子域名 - 认证配置错误:你当前的
Authorization头仅填写了Basic =,不符合Basic认证规则,你需要将{你的邮箱}/token:{你的API令牌}做Base64编码后,替换等号位置的内容,格式为Basic {生成的Base64字符串}
修复后代码示例
def call_api # 构造符合接口要求的负载结构 payload = { macros: @data } # 替换为你的Zendesk子域名,补全https前缀 url = URI("https://<你的子域名>.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 <你生成的Base64认证串>" request["Content-Type"] = "application/json" request.body = JSON.dump(payload) # 可选:打印请求、响应内容辅助排查 p "请求体内容:#{request.body}" response = https.request(request) p "响应状态码:#{response.code}" p "响应详情:#{response.body}" end
如果修改后仍然报错,可以先打印接口返回的完整响应内容,500错误的响应体一般会标注具体的错误原因(比如字段缺失、权限不足等),可以根据提示进一步调整参数。
内容的提问来源于stack exchange,提问作者user16741832
相关产品推荐
相关产品推荐

