如何从 Koala 响应中解析 facebook 权限?
How to parse facebook permissions from Koala response?
我正在使用 Koala gem 来获取用户权限。
permissions = client.get_connections('me', 'permissions')
=> [{"permission"=>"installed", "status"=>"granted"},
{"permission"=>"public_profile", "status"=>"granted"},
{"permission"=>"read_stream", "status"=>"granted"},
{"permission"=>"email", "status"=>"granted"},
{"permission"=>"read_insights", "status"=>"granted"},
{"permission"=>"manage_pages", "status"=>"granted"},
{"permission"=>"user_friends", "status"=>"granted"}]
我想解析该响应以在简单的字符串中获得授予的权限,例如:"email, read_stream, read_insights, user_friends"
我考虑过:
permissions.map {|h| puts h.fetch('permission') if h.fetch('status') == 'granted'}
这是一种可能的解决方案:
permissions.select {|h| h["status"] == "granted"}.map { |h| h["permission"] }.join(",")
编辑:
您快完成了,只需删除 puts
并将结果与 Array.join
合并
permissions.map {|h| h.fetch('permission') if h.fetch('status') == 'granted'}.join(",")
的原始建议
permissions.map { |h| puts h.fetch('permission') if h.fetch('status') == 'granted' }
很接近但是有两个问题,第一个已经指出是多余的 puts
调用。其次,由于可能存在 'granted' 以外的状态值,因此生成的数组可能包含 nil
个条目,需要在加入之前清除这些条目:
permissions.map { |h| h.fetch('permission') if h.fetch('status') == 'granted' }.compact.join(', ')
实际上,这似乎是一个更隐蔽但稍微更有效的方法的有效案例,它避免了两次遍历输入:
permissions.each_with_object([]) { |h, a| a << h['permission'] if h['status'] == 'granted' }.join(', ')
您似乎没有使用 Hash#fetch
提供的附加功能,那么为什么不直接使用 Hash#[]
?
我正在使用 Koala gem 来获取用户权限。
permissions = client.get_connections('me', 'permissions')
=> [{"permission"=>"installed", "status"=>"granted"}, {"permission"=>"public_profile", "status"=>"granted"},
{"permission"=>"read_stream", "status"=>"granted"},
{"permission"=>"email", "status"=>"granted"},
{"permission"=>"read_insights", "status"=>"granted"},
{"permission"=>"manage_pages", "status"=>"granted"},
{"permission"=>"user_friends", "status"=>"granted"}]
我想解析该响应以在简单的字符串中获得授予的权限,例如:"email, read_stream, read_insights, user_friends"
我考虑过:
permissions.map {|h| puts h.fetch('permission') if h.fetch('status') == 'granted'}
这是一种可能的解决方案:
permissions.select {|h| h["status"] == "granted"}.map { |h| h["permission"] }.join(",")
编辑:
您快完成了,只需删除 puts
并将结果与 Array.join
permissions.map {|h| h.fetch('permission') if h.fetch('status') == 'granted'}.join(",")
permissions.map { |h| puts h.fetch('permission') if h.fetch('status') == 'granted' }
很接近但是有两个问题,第一个已经指出是多余的 puts
调用。其次,由于可能存在 'granted' 以外的状态值,因此生成的数组可能包含 nil
个条目,需要在加入之前清除这些条目:
permissions.map { |h| h.fetch('permission') if h.fetch('status') == 'granted' }.compact.join(', ')
实际上,这似乎是一个更隐蔽但稍微更有效的方法的有效案例,它避免了两次遍历输入:
permissions.each_with_object([]) { |h, a| a << h['permission'] if h['status'] == 'granted' }.join(', ')
您似乎没有使用 Hash#fetch
提供的附加功能,那么为什么不直接使用 Hash#[]
?