如何使用ruby查找第n个节点值

时间:2016-07-13 13:07:21

标签: ruby json api parsing

我有一个类似结构的JSON响应树

{
  "id":""
  "node": [
      {
        "id":""
        "node": [
              {
                "id":""
                "node":[] 
           }
        ]
     }
  ]
}

我怎样才能获得最后一个id值,它只是一个例子,它可能包含n个循环。

3 个答案:

答案 0 :(得分:3)

h = {
  "id" => "1",
  "node" => [
    {
      "id" => "2",
      "node" => [
        {
          "id" => "3",
          "node" => []
        }
      ]
    }
  ]
}


▶ λ = ->(h) { h['node'].empty? ? h['id'] : λ.(h['node'].last) }
#⇒ #<Proc:0x00000002f4b490@(pry):130 (lambda)>
▶ λ.(h)
#⇒ "3"

答案 1 :(得分:0)

也许这种方法会对你有所帮助。您可以使用子哈希调用recursion方法。

h = {
  "id" => "1",
  "node" => [
    {
      "id" => "2",
      "node" => [
        {
          "id" => "3",
          "node" => []
        }
      ]
    }
  ]
}

def get_last_node(h)
  if Array === h['node'] && !h['node'].empty?
    h['node'].each do |node_h|
      id = send(__callee__, node_h)
      return id if id
    end
    nil
  else
    h['id']
  end
end

get_last_node(h)
# => 3

答案 2 :(得分:0)

与@ mudasobwa的回答类似:

def get_last_node(h)
  h["node"].empty? ? h["id"] : get_last_node(h["node"].first)
end

get_last_node(h)
  #=> 3