2017-11-04 88 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"}]