解析然后读取 JSON / HTTParty::Response 的具体值

Parsing and then reading specific values of JSON / HTTParty::Response

我希望能够从此代码中检索层和分区,但是当使用来自 HTTParty 的响应对象并执行 res[0]["#{id}"]["tier"] 时,它会出现 "cannot implicitly convert string to integer",这意味着它需要一个整数,但我不知道在哪里

这是我得到的响应(我在循环中执行此操作,这就是我将 ID 放入 "#{id}" 的原因)

{"37714607": [
   {
      "queue": "RANKED_SOLO_5x5",
      "name": "Diana's Patriots",
      "entries": [{
         "leaguePoints": 32,
         "isFreshBlood": false,
         "isHotStreak": false,
         "division": "IV",
         "isInactive": false,
         "isVeteran": false,
         "losses": 65,
         "playerOrTeamName": "Wicked7000",
         "playerOrTeamId": "37714607",
         "wins": 59
      }],
      "tier": "GOLD"
   },
   {
      "queue": "RANKED_TEAM_5x5",
      "name": "Nasus's Justicars",
      "entries": [{
         "leaguePoints": 81,
         "isFreshBlood": false,
         "isHotStreak": false,
         "division": "V",
         "isInactive": false,
         "isVeteran": false,
         "losses": 73,
         "playerOrTeamName": "Pink Fedoras",
         "playerOrTeamId": "TEAM-5ffedf90-45ba-11e4-9e4b-c81f66db8bc5",
         "wins": 73
      }],
      "tier": "SILVER"
   },
   {
      "queue": "RANKED_TEAM_3x3",
      "name": "Cassiopeia's Marksmen",
      "entries": [{
         "leaguePoints": 0,
         "isFreshBlood": false,
         "isHotStreak": true,
         "division": "I",
         "isInactive": false,
         "isVeteran": false,
         "losses": 3,
         "playerOrTeamName": "The Booty Brothers",
         "playerOrTeamId": "TEAM-53a65b60-ff2d-11e4-9e51-c81f66dba0e7",
         "wins": 7
      }],
      "tier": "BRONZE"
   }
]}

看来您需要改为 res[id.to_s][0]["tier"] – 首先获取根键,然后获取第一个元素(反之亦然)。

作为您的json如下所示

{"37714607": [
   {
      "queue": "RANKED_SOLO_5x5",
      "name": "Diana's Patriots",
      "entries": [{
         "leaguePoints": 32,
         "isFreshBlood": false,
         "isHotStreak": false,
         "division": "IV",
         "isInactive": false,
         "isVeteran": false,
         "losses": 65,
         "playerOrTeamName": "Wicked7000",
         "playerOrTeamId": "37714607",
         "wins": 59
      }],
      "tier": "GOLD"
   },

所以它将首先 id = "37714607" 然后是一个数组开始([)该数组包含哈希所以第一个哈希有 "tier" key

应该是

 tiers = []
 res["#{id}"].each do |result| #id = 37714607 
   tiers << result["tier"]
 end