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

访问JSON API嵌套数据报错:无法将String隐式转换为Integer

解决FPL API获取所有first_name数据的错误问题

你遇到的no implicit conversion of String into Integer错误,核心原因是object["elements"]返回的是数组类型(包含多个球员对象的集合),而非单个哈希对象。数组仅支持整数索引访问元素,直接使用字符串"first_name"作为索引,会触发类型转换错误。

修正后的代码

通过遍历数组提取每个元素的first_name即可解决问题,推荐使用map方法实现:

def index
  require 'net/http'
  require 'json'
  url = 'https://fantasy.premierleague.com/api/bootstrap-static/'
  uri = URI(url)
  response = Net::HTTP.get(uri)
  object = JSON.parse(response)
  # 遍历elements数组,提取每个球员的first_name
  @testy = object["elements"].map { |player| player["first_name"] }
end

扩展用法示例

如果需要同时获取球员全名,可扩展逻辑如下:

@players_full_names = object["elements"].map do |player|
  "#{player["first_name"]} #{player["second_name"]}"
end

额外优化建议

  • 避免在控制器方法内使用require,建议将require 'net/http'和require 'json'放在文件最顶部。
  • 添加基础错误处理,防止网络请求或解析失败导致崩溃:
def index
  require 'net/http'
  require 'json'
  url = 'https://fantasy.premierleague.com/api/bootstrap-static/'
  uri = URI(url)
  begin
    response = Net::HTTP.get(uri)
    object = JSON.parse(response)
    @testy = object["elements"].map { |player| player["first_name"] }
  rescue Net::OpenTimeout, JSON::ParserError => e
    @testy = []
    Rails.logger.error "FPL数据获取失败: #{e.message}"
  end
end

内容的提问来源于stack exchange,提问作者ldthompson

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 01:46:19