想要从每个有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'
获得一个简单的数组每marketId从Moneyline市场,没有其他信息就足够了。如果喜欢,使用Rails方法也可以。
对不起,如果我的编辑搞砸了语法。 Here's the source。在解析JSON之后,它看起来像=>
而不是:
。
谢谢!
宁可不使用外部资源。这是在一个Rails应用程序,所以无论是红宝石或铁轨方法 – iamse7en
你有一个正确的语法的例子吗? –
@EricDuminil对不起,如果我的编辑搞砸了。看到这里:https://www.betfair.com/www/sports/exchange/readonly/v1/allmarkets?eventTypeIds=6423&types=MARKET_DESCRIPTION,EVENT&alt=json在我的控制台,它基本上看起来像只有'=>'解析后代替':'。这有点凌乱。 – iamse7en