You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails API返回多组JSON结果报错求助:字符串转整数失败

解决API数据获取的报错问题

我来帮你搞定这个问题!你遇到的no implicit conversion of String into Integer和undefined method []错误,核心是对API返回的JSON结构理解有误,加上代码里的几个逻辑和语法问题,咱们一步步修正:

错误原因分析

  1. API返回结构判断错误:你调用的API返回的是组织对象数组(外层是[]包裹),但你直接尝试用response['name']去取值,这相当于给数组传字符串键,Ruby会把字符串当成要转换的整数,所以抛出类型转换错误。
  2. 链式取值逻辑错误:response['name']['description']这种写法完全错误——response['name']得到的是字符串(比如"Transition Projects"),你再从字符串里取description属性,自然会报undefined method [],因为字符串不支持哈希式的键取值。
  3. 变量名冲突:循环里的变量名和外层的response重复,导致变量覆盖,逻辑混乱。
  4. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:16:47