Ruby on rails 使用RubyonRails解析Json数据
目标:解析数据以显示erb文件中的所有id 问题:Ruby on rails 使用RubyonRails解析Json数据,ruby-on-rails,ruby,json,parsing,nomethoderror,Ruby On Rails,Ruby,Json,Parsing,Nomethoderror,目标:解析数据以显示erb文件中的所有id 问题:由于这段代码,DemoController#索引中的nomethoder错误 @x=obj[i][“id”] 当我用一个数字替换上面代码中的“I”时,会显示一个id号,这使我相信while循环是正确的。它只是不明白“我”是什么 我做错了什么 这是我的控制器和视图代码 demo_controller.rb require 'rubygems' require 'json' require 'net/http' require 'httparty'
由于这段代码,DemoController#索引中的nomethoder错误
@x=obj[i][“id”]
当我用一个数字替换上面代码中的“I”时,会显示一个id号,这使我相信while循环是正确的。它只是不明白“我”是什么
我做错了什么
这是我的控制器和视图代码
demo_controller.rb
require 'rubygems'
require 'json'
require 'net/http'
require 'httparty'
class DemoController < ApplicationController
respond_to :json
$angelURI = "https://api.angel.co/1/jobs"
def index
response = HTTParty.get('https://api.angel.co/1/jobs/')
obj = JSON.parse(response.body)["jobs"]
arraylength = obj.length
i = 0
while i <= arraylength do
@x = obj[i]["id"]
i += 1
end
end
end
需要“rubygems”
需要“json”
需要“net/http”
需要“httparty”
类DemoController<应用程序控制器
回复:json
$angelURI=”https://api.angel.co/1/jobs"
def索引
response=HTTParty.get('https://api.angel.co/1/jobs/')
obj=JSON.parse(response.body)[“作业”]
阵列长度=目标长度
i=0
虽然ii
是while
循环中的一个计数器,但它是最基本的。我想你循环到更多,改变I
是中的一个计数器,而循环是基础。我想你会循环到更多,改变
您在循环的每个级别为同一@x变量赋值-这将以@x具有最后一个id的值结束-这是预期的行为吗
我现在看不出你的数组有什么奇怪的地方,但Ruby倾向于将每一个都用于:
obj.each do |elem|
@x = elem["id"]
end
Upate:遵循zishe对循环的好理解,使用每个元素也可以避免类似的问题(“我需要转到第I个元素还是在第I个元素停止”)
您在循环的每个级别为同一@x变量赋值-这将以@x具有最后一个id的值结束-这是预期的行为吗
我现在看不出你的数组有什么奇怪的地方,但Ruby倾向于将每一个都用于:
obj.each do |elem|
@x = elem["id"]
end
Upate:遵循zishe关于循环的好方法,使用每种方法也可以避免此类问题(“我需要去第I个元素还是在第I个元素停止”)。结合我们得到的最佳答案:
@x = []
obj.each do |job|
@x << job["id"]
end
@x=[]
每个人都有自己的工作|
@x结合最佳答案,我们得到:
@x = []
obj.each do |job|
@x << job["id"]
end
@x=[]
每个人都有自己的工作|
@x您的代码中有一个由一个关闭的错误。基本上,您在数组上循环,然后尝试访问比数组中多的一个元素,然后返回为nil
,自然不会作为散列
假设您的obj
是一个包含3个元素的数组,因此arraylength
是三个元素。现在,您正在从数组中获取4个元素,这些元素的索引为0
、1
、2
和3
。由于只有3个元素0..2
,最后一个obj[3]
不存在
要保留现有代码,可以将循环更改为以下内容:
while i < arraylength do
#...
end
您的代码中有一个off-by-one错误。基本上,您在数组上循环,然后尝试访问比数组中多的一个元素,然后返回为nil
,自然不会作为散列
假设您的obj
是一个包含3个元素的数组,因此arraylength
是三个元素。现在,您正在从数组中获取4个元素,这些元素的索引为0
、1
、2
和3
。由于只有3个元素0..2
,最后一个obj[3]
不存在
要保留现有代码,可以将循环更改为以下内容:
while i < arraylength do
#...
end
因此,您有一个off-by-one错误:您的while循环运行得太远(因为所以,您有一个off-by-one错误:您的while循环运行得太远)(因为这正是我想要的。非常感谢!这正是我想要的。非常感谢!哇!这对制作帮助文件非常有帮助。我一定要尝试一下。非常感谢它的清晰性!哇!这对制作帮助文件非常有帮助。我一定要尝试一下。非常感谢清晰!我忽略了“我忽略了”不知道“。最后一个“谢谢你的提示!不知道”。最后一个“谢谢你的提示!谢谢你的”。每个“提示!谢谢你的”。每个“提示!
require 'httparty'
module JobsParser
ANGEL_JOBS_URI = "https://api.angel.co/1/jobs"
def all_job_ids
all_jobs.map{|j| j["id"]}
end
def all_jobs
response = HTTParty.get(ANGEL_JOBS_URI)
jobs = JSON.parse(response.body)["jobs"]
end
end
class DemoController < ApplicationController
def index
all_job_ids = JobsParser.all_job_ids
@x = all_job_ids.last
end
end