【发布时间】:2016-11-21 04:24:40
【问题描述】:
我想选择marketName == 'Moneyline' 中的任何marketId,但只选择countryCode == 'US' || 'GB' 或eventName.include?(' @ ') 的那些。 (space 在@ 之前和之后)。我尝试了不同的 map 和 select 组合,但有些节点没有 countryCode,这让我的事情变得复杂。 This 是来源,但它可能看起来像一个示例:
{"currencyCode"=>"GBP",
"eventTypes"=>[
{"eventTypeId"=>7522,
"eventNodes"=>[
{"eventId"=>28024331,
"event"=>
{"eventName"=>"EWE Baskets Oldenburg v PAOK Thessaloniki BC"
},
"marketNodes"=>[
{"marketId"=>"1.128376755",
"description"=>
{"marketName"=>"Moneyline"}
},
{"marketId"=>"1.128377853",
"description"=>
{"marketName"=>"Start Lublin +7.5"}
}}}]},
{"eventId"=>28023434,
"event"=>
{"eventName"=>"Asseco Gdynia v Start Lublin",
"countryCode"=>"PL",
},
"marketNodes"=>
[{"marketId"=>"1.128377853", ETC...
【问题讨论】:
-
尝试使用递归?稍后我会写一个完整的答案...
-
也可以使用json路径
-
当你给出一个例子时,请执行以下操作。 1. 使其成为有效的 Ruby 对象(没有“ETC...”),以便读者可以针对您的示例运行他们的代码。 2. 显示所需的返回值。 3. 通过去除无关元素来简化示例。由于
hash = JSON.parse(File.read('data.json'))很明显,因此您可能只想显示哈希而不是 JSON 字符串,并且不引用 JSON。 4. 为每个输入对象分配一个变量(例如,h = {currency...})。这使读者可以在答案和 cmets 中引用这些变量,而无需定义它们。