2016-07-20 3 views
-1

値:私は何をしたいかRubyはJSONレスポンスを反復処理し、リターンは、私はJSONを反復処理しようとしていますし、私は次のエラーの落下ファウルを保つ

no implicit conversion of String into Integer (TypeError) 

は私の応答を反復処理し、私のルールのリターンをベースにデータのセグメント。

data = JSON.parse(response) 

data = (whats below) 

{ 
     “summary”: { 
      “Id”: 5452, 
      “IdOutcome”: "Scored", 
      “Results”: [ 
      { 
       “test”: "car", 
       “value”: 10.0, 
       “num”: 0 
      }, 
      { 
       “test”: "carz", 
       “value”: 0.0, 
       “num”: 0 
      }, 
      { 
       “test”: "bars", 
       “value”: 10.0, 
       “num”: 1 
      } 
      ] 
     } 
     } 

をだから私は「結果」を反復処理し、「テスト」またはヘックさえ、すべての最高のnum値のブロックのいずれかをバック戻したい上記の例の応答:次のように私の応答があります。そこで、以下の例では、私はSO基本的に私は返される配列データを反復処理する必要が

"bars", 
10.0, 
1 

か、単に

"bars" 

を返されます。

+0

我々はこれを解決に向かってあなたの努力を見てみたいと思います。それがなければ、あなたは何も書いていないように見え、私たちにそれをしてもらいたいと思います。 「[ask]」とリンク先のページをお読みください。 –

答えて

0

あなたはEnumerable#max_byを使用したい:

max_result = data["summary"]["Results"].max_by {|r| r["num"] } 
# => { "test" => "bars", 
#  "value" => 10.0, 
#  "num" => 1 
# } 

max_result["test"] 
# => "bars" 
0

54a52は無効です。おそらくそれを引用符で囲んで"54a52"にする必要があります。これを変更すると、文字列が正しく解析されます。

JSON.parse('{"summary":{"Id":"54a52","IdOutcome":"Scored","Results":[{"test":"car","value":10.0,"num":0},{"test":"carz","value":0.0,"num":0},{"test":"bars","value":10.0,"num":1}]}}') 
=> {"summary"=>{"Id"=>"54a52", "IdOutcome"=>"Scored", "Results"=>[{"test"=>"car", "value"=>10.0, "num"=>0}, {"test"=>"carz", "value"=>0.0, "num"=>0}, {"test"=>"bars", "value"=>10.0, "num"=>1}]}} 
+0

私が間違いを犯して謝罪したときの謝罪。私は正常に解析することができますが、私がしたいことは、解析された応答から特定の値を引き出すことです –

関連する問題