1

このように以下のjsonを解析しようとしていますが、キーがハッシュではなく文字列であるというエラーが表示されます。位置、名前、ID、チームのデータを抽出し、位置の種類ごとにルビー ハッシュにプッシュしようとしています。

require 'json'
json = JSON.parse(response.body)
json.each do |key, value|
    if(key =~ /players/)        
         key.each do |k, v|
           puts k.inspect
         end
    end
 end




{
      "version": "1.0",
      "players": {
        "timestamp": "-1",
        "player": [
          {
            "position": "TMDL",
            "name": "Bills, Buffalo",
            "id": "0251",
            "team": "BUF"
          },
          {
            "position": "TMDL",
            "name": "Colts, Indianapolis",
            "id": "0252",
            "team": "IND"
          },
          {
            "position": "TMDL",
            "name": "Dolphins, Miami",
            "id": "0253",
            "team": "MIA"
          }
         ]
      }
   }
4

3 に答える 3

1

json 変数はすでにハッシュ (解析後) であるため、通常の Ruby ハッシュのように使用できます。

于 2013-04-03T05:35:40.250 に答える
1

多分あなたはこれを試すことができます:

require 'json'
require 'ostruct'
require 'awesome_print'

test = '{
    "version": "1.0",
    "players": {
      "timestamp": "-1",
      "player": [
        {
          "position": "TMDL",
          "name": "Bills, Buffalo",
          "id": "0251",
          "team": "BUF"
        },
        {
          "position": "TMDL",
          "name": "Colts, Indianapolis",
          "id": "0252",
          "team": "IND"
        },
        {
          "position": "TMDL",
          "name": "Dolphins, Miami",
          "id": "0253",
          "team": "MIA"
        }
       ]
    }
}'



json = JSON.parse(test)
json.each do |key, value|
  if(key =~ /players/)
       value['player'].each do |k, v|
         puts k.inspect
       end
  end
end
于 2013-04-03T05:42:28.907 に答える