发出循环哈希,检查值并保存为空哈希

时间:2018-04-09 18:55:52

标签: ruby-on-rails json ruby api hash

我尝试从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!"

1 个答案:

答案 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"]