【问题标题】:Parsing and then reading specific values of JSON / HTTParty::Response解析然后读取 JSON / HTTParty::Response 的特定值
【发布时间】:2015-08-14 12:01:28
【问题描述】:

我希望能够从此代码中检索层级和分区,但是当使用来自 HTTParty 的响应对象并执行 res[0]["#{id}"]["tier"] 时,它会出现“无法将字符串隐式转换为整数”,这意味着它需要一个整数,但我不知道在哪里

这是我得到的响应(我在循环中执行此操作,这就是为什么我在 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"
   }
]}

【问题讨论】:

    标签: ruby-on-rails json httparty


    【解决方案1】:

    作为你的 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"

    应该是这样的

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

    【讨论】:

    • 谢谢,我不知道为什么这不起作用(我可能会更多地阅读 JSON,因为这应该有助于解决未来的问题)
    • 所以基本上这就是我所说的,只是不需要背诵 OP 的问题和 20 分钟后。我不是错过了什么吗? :)
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-29
      • 2022-09-23
      • 1970-01-01
      相关资源
      最近更新 更多