Rails API返回多组JSON结果报错求助:字符串转整数失败
解决API数据获取的报错问题
我来帮你搞定这个问题!你遇到的no implicit conversion of String into Integer和undefined method []错误,核心是对API返回的JSON结构理解有误,加上代码里的几个逻辑和语法问题,咱们一步步修正:
错误原因分析
- API返回结构判断错误:你调用的API返回的是组织对象数组(外层是
[]包裹),但你直接尝试用response['name']去取值,这相当于给数组传字符串键,Ruby会把字符串当成要转换的整数,所以抛出类型转换错误。 - 链式取值逻辑错误:
response['name']['description']这种写法完全错误——response['name']得到的是字符串(比如"Transition Projects"),你再从字符串里取description属性,自然会报undefined method [],因为字符串不支持哈希式的键取值。 - 变量名冲突:循环里的变量名和外层的
response重复,导致变量覆盖,逻辑混乱。 - URL参数格式错误:请求URL里的
? category有空格,会导致参数无法正确识别,应该去掉空格。
修正后的代码
服务类代码(Organization.rb)
class Organization def self.get_homeless_organizations # 修正URL的空格问题 response = JSON.parse(RestClient.get('http://localhost:3001/organizations?category=Homelessness')) # 遍历数组里的每个组织对象 response.each do |organization| # 从单个组织对象中提取需要的字段 puts "名称: #{organization['name']}" puts "描述: #{organization['description']}" puts "地址: #{organization['address']}" puts "电话: #{organization['phone']}" puts "网站: #{organization['website']}" puts "-------------------------" end # 如果需要把数据返回给控制器,直接返回response即可(后续可以在控制器里处理) response end end
控制器代码(比如organizations_controller.rb)
def index # 获取数据并传给视图 @homeless_organizations = Organization.get_homeless_organizations end
关键修改点说明
- 先确认API返回的是数组,所以用
response.each遍历每个组织对象; - 每个组织对象是哈希结构,直接通过
organization['字段名']提取对应值; - 修正了URL的空格问题,确保请求参数正确;
- 循环变量名改为
organization,避免和外层的response冲突; - 如果需要把数据传递给视图渲染,直接返回整个数组即可,控制器可以拿到后在视图里遍历展示。
额外建议
如果需要筛选返回的字段(只保留name、description、address、phone、website),可以在遍历的时候做映射:
def self.get_homeless_organizations response = JSON.parse(RestClient.get('http://localhost:3001/organizations?category=Homelessness')) # 只保留需要的字段 response.map do |org| org.slice('name', 'description', 'address', 'phone', 'website') end end
这样返回的数组里每个对象只会包含你需要的字段,更简洁。
内容的提问来源于stack exchange,提问作者Masen
相关产品推荐
相关产品推荐

