gpt4 book ai didi

ruby - TypeError 问题 : no implicit conversion in Sinatra + JSON. parse

转载 作者:数据小太阳 更新时间:2023-10-29 08:56:45 25 4
gpt4 key购买 nike

我正在尝试设置网络 Hook ,遵循 this GitHub tutorial

require 'sinatra'
require 'json'
require 'net/http'
require 'pp'

set :port, 31415

# Descarga las diferencias hechas para un push
post '/' do
push = JSON.parse(request.body.read)
piezas = push["compare"].split("/")
api_url = "/repos/#{piezas[3]}/#{piezas[4]}/compare/#{piezas[6]}"
diff = Net::HTTP.get(URI("https://api.github.com#{api_url}"))
puts diff.class
pp(JSON.parse(diff))
end

diff.class 打印:

String

而且,事实上,最后一句工作正常,通过 pp 结构打印。但是,打印后,它会产生错误

[2018-10-25 20:00:23] ERROR TypeError: no implicit conversion of Array into String

它没有引用脚本中的任何行,但错误是否可能出现在第一个 JSON.parse 中? request.body.read 会是一个数组吗?

更新 我无法将其分解为单独的任何 JSON.parse。下载 Hook 负载工作正常,从 GitHub API 下载 JSON 无需 glithc。不知何故将它们一起使用是行不通的。

最佳答案

图书馆可能将响应视为文本。尝试添加一个 Accept header 。这对我有用:

请求["接受"] = "应用程序/json"

例子:

uri = URI.parse("https://api.github.com")
req = Net::HTTP::Get.new(URI("https://api.github.com/repos/JJ/microservices-broker/compare/d5d39c5db99d...bbbf695d1bf2"))
req["Accept"] = 'application/json'
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
response = http.request(req)
json = JSON.parse(response.body)
json['url']

# or

json = JSON.parse(response.body, symbolize_names: true)
json[:url]

(编辑:)此外,使用 Net::HTTP 真的很痛苦。请检查这些库:

https://github.com/lostisland/faraday https://github.com/octokit/octokit.rb

关于ruby - TypeError 问题 : no implicit conversion in Sinatra + JSON. parse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52994727/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com