marketName == 'Moneyline'
を持つすべての市場からすべてmarketID
を抽出します。 .map
s、.reject
s、および/または.select
sのいくつかの組み合わせを試しましたが、複雑な構造が私を混乱させるので、それを絞り込むことはできません。Ruby:条件に基づいて深くネストされたJSON構造の要素を抽出する
events
にはmarkets
が多くあり、events
も多くあります。構造のサンプル(簡潔にするためにそれを編集してみました):
{"currencyCode"=>"GBP",
"eventTypes"=>[
{"eventTypeId"=>6423,
"eventNodes"=>[
{"eventId"=>28017227,
"event"=>
{"eventName"=>"Philadelphia @ Seattle"
},
"marketNodes"=>[
{"marketId"=>"1.128274650",
"description"=>
{"marketName"=>"Moneyline"}
},
{"marketId"=>"1.128274625",
"description"=>
{"marketName"=>"Winning Margin"}
}}}]},
{"eventId"=>28018251,
"event"=>
{"eventName"=>"Arkansas @ Mississippi State"
},
"marketNodes"=>[
{"marketId"=>"1.128299882",
"description"=>
{"marketName"=>"Under/Over 60.5pts"}
},
{"marketId"=>"1.128299881",
"description"=>
{"marketName"=>"Moneyline"}
}}}]},
{"eventId"=> etc....
は、あらゆる種類のものを試してみましたが、例えば、
markets = json["eventTypes"].first["eventNodes"].map {|e| e["marketNodes"].map { |e| e["marketId"] } if (e["marketNodes"].map {|e| e["marketName"] == 'Moneyline'})}
markets.flatten
# => yields every marketId not every marketId with marketName of 'Moneyline'
は他とMoneyline市場からのすべてのmarketIdとの単純な配列を取得します情報は十分です。 Railsメソッドを使用することは、あまり好ましくない場合もあります。
私の編集が構文を乱した場合は申し訳ありません。 Here's the source。 JSONの解析後、:
ではなく=>
と表示されます。
ありがとうございました!
外部リソースを使用しないでください。これはレールアプリの中でrubyかrailsのどちらかの方法です – iamse7en
正しい構文の例がありますか? –
@EricDuminil申し訳ありませんが、私の編集がそれを混乱させました。こちらをご覧ください:https://www.betfair.com/www/sports/exchange/readonly/v1/allmarkets?eventTypeIds=6423&types=MARKET_DESCRIPTION,EVENT&alt=json私のコンソールでは、基本的には '=>'解析後に ':'の代わりに ''。ちょっと面倒です。 – iamse7en