使用Ruby从json中提取值

时间:2017-02-02 13:50:50

标签: json ruby hash key

我只需要提取'管理员'从这个Json使用Ruby:

JSON -

 {
    "Roles":[
        {
             "admins":[
                "me"
            ],
        "role":"cleanup"
        },
    {
        "admins":[
            "tester"
        ],
        "role":"create a mess"
    },
       ]

}

RUBY -

require 'json'
file = File.read('adminlist_Feb_2017.json')
thismonthlist=JSON.parse(file)
puts thismonthlist['admins']

输出 - 这给了我一个空白输出但是如果我将最后一行更改为:        把这个单一列表['角色']

它给了我一切。我只想要管理员名单。

2 个答案:

答案 0 :(得分:1)

尝试这样的事情

 thismonthlist[:Roles].flat_map { |role| role[:admins] }
 => ["me", "tester"] 

答案 1 :(得分:0)

admins = []
File.open('adminlist_Feb_2017.json', 'r') do |file|
  json = JSON.parse(file.read)
  admins = json["Roles"].flat_map{|role| role["admins"]}.uniq
end

admins
# => ["me", "tester"]

我打开文件并在一个区块中处理它以确保它在结束时关闭。在块中,我读取文件内容并将json字符串解析为哈希。然后我通过"角色"哈希,抓住"管理员"数组并将其作为一个数组返回Enumerable#flat_map。在我使用Enumerable#uniq仅返回每个管理员一次之后。