我尝试从api中提取json数据,遍历JSON数据的哈希,将新数据附加到空哈希,然后检查提取的数据是否有关键' next_page'有任何价值......如果值返回nill,则破坏循环。我成功地从api中提取了第一批数据,但我的循环似乎不正确,因为没有数据被插入到我创建的空哈希中。
任何想法都会受到高度赞赏。感谢您提出我的问题!
require 'net/http'
require 'uri'
require 'json'
#imports APR User data from the zendesk api and populates the database with it.
uri = URI.parse("https://tester.zendesk.com/api/v2/users.json")
request = Net::HTTP::Get.new(uri)
request.content_type = "application/json"
request.basic_auth("cbradford@tester.com", "tester32")
req_options = {
use_ssl: uri.scheme == "https",
}
@response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(request)
end
puts @response.body
puts @response.message
puts @response.code
res = @response.body
users = res["users"]
data = {}
if users["next_page"]
newUri = users.fetch('next_page')
uriLoop = URI.parse(newUri)
request = Net::HTTP::Get.new(uriLoop)
request.content_type = "application/json"
request.basic_auth("cbradford@tester.com", "tester32")
req_options = {
use_ssl: uriLoop.scheme == "https",
}
@responseLoop = Net::HTTP.start(uriLoop.hostname, uriLoop.port, req_options) do |http|
http.request(request)
end
resLoop = JSON.parse(@responseLoop.body)
puts resLoop
users = resLoop["users"]
data.concat(users)
end
puts data
puts "hash created Successfully!"
答案 0 :(得分:1)
您始终省略第一个获取的用户。在检查是否存在next_page
之前,您从不存储已提取的用户,因此data
仍为空。
见这里:
users = res["users"]
data = {} ## ---data is initialised but never filled?
if users["next_page"]
其次我怀疑res["users"]
是一个数组,因为你后来写data.concat(users)
实际上data
也应该是一个数组。
所以你的代码应该被修复为替换上面提到的三行,如下所示:
data = res["users"]
if users["next_page"]