2017-11-04 34 views
0

我是新来的。我需要从这个哈希中检索特定的人员信息。假设我想获得人Micheal Jordans的信息(,用粗体表示)。我有这样的代码:Ruby提取API多维哈希过滤器

jdoc.fetch("schedule").fetch("schedule_layers").fetch(users).each do |jsonUser| 
puts jsonUser 
end 

,但它似乎并没有工作。我认为它会给所有的“用户”键的价值,但它只是吐出整个事情。我将如何通过代码获得Micheal Jordan的信息?

非常感谢!请帮我理解!

"schedule_layers"=> 
    [{"name"=>"Layer 1", 
     "rendered_schedule_entries"=>[], 
     "rendered_coverage_percentage"=>nil, 
     "id"=>”A1B2C3”, 
     "start"=>"2017-10-09:00:46-05:00", 
     "end"=>nil, 
     "rotation__start"=>"2017-10-02T20:30:00-05:00", 
     "length_seconds"=>36000, 
     "users"=> 
     {"user"=> 
      {"id"=>”0000001”, 
      "type"=>"user_reference”, 
      "summary"=>”Larry.Bird”, 
      "self"=>"https://api.com/users/0000001”, 
      "html_url"=>"https://target.com/users/0000001”}}], 
     "restrictions"=> 
     [{"type"=>"daily_restriction", 
     "start_time_of_day"=>”00:30:00", 
     "duration_seconds"=>120000}]}, 
    {"name"=>"Layer 2", 
     "schedule_entries"=>[], 
     "coverage_percentage"=>nil, 
     "id"=>”0000002”, 
     "start"=>"2016-12-18:00:51-55:00", 
     "end"=>”2017–05-18:12:51-55:00", 
     "virtual_start"=>"2016-20-17:00:10-05:00", 
     "turn_length_seconds"=>120000, 
     "users"=> 
     {"user"=> 
      **{"id"=>”0000003”, 
      "type"=>"user_reference", 
      "summary"=>”Micheal.Jordan”, 
      "self"=>"https://api.com/users/0000003”, 
      "html_url"=>"https://target.com/users/0000003”}},** 
     {"user"=> 
      {"id"=>”0000004”, 
      "type"=>"user_reference", 
      "summary"=>”Allen.Iverson”, 
      "self"=>"https://api.com/users/0000004”, 
      "html_url"=>"https://target.com/users/0000004”}}, 
      "restrictions"=>[]}, 
+0

能否请您发布整个数据结构?似乎有一些零件丢失。例如,嵌套是无效的,括号不匹配,你开始用''schedule''挖掘有问题的值,但是没有这样的键。 – spickermann

回答

0

看起来你在fetch(users)中有错误的语法。

我猜你需要做这样的事情(我用符号代替字符串):

json_hash = { 
    schedule_layers: [ 
    { 
     name: 'l1', 
     users: [ 
     { name: 'u1' }, 
     { name: 'u2' } 
     ] 
    }, 
    { 
     name: 'l2', 
     users: [ 
     { name: 'u3' } 
     ] 
    } 
    ] 
} 

[2] pry(main)> json_hash.fetch(:schedule_layers).flat_map {|x| x[:users] }.each {|x| p x } 
{:name=>"u1"} 
{:name=>"u2"} 
{:name=>"u3"} 
=> [{:name=>"u1"}, {:name=>"u2"}, {:name=>"u3"}] 

要选择特定的用户,您可以使用select方法:

[3] pry(main)> json_hash.fetch(:schedule_layers).flat_map {|x| x[:users] }.select {|x| x[:name] == 'u3' } 
=> [{:name=>"u3"}]