ruby-on-rails - 仅从 Ruby 哈希中提取特定成员
问题描述
我想从 dropbox api 返回的以下哈希中仅提取 team_member_id 和 display_name。
{"members"=>[{"profile"=>{"team_member_id"=>"dbmid:AACHnGyTHHna44224Ad-vVewFDJ9nzS7be9GJ6Tc", "account_id"=>"dbid:AAD234234234x2yGXHsG3guC04Fp8QPwUF9NDO55w", "email"=>"name@domain.com", "email_verified"=>true, "secondary_emails"=>[], "status"=>{".tag"=>"active"}, "name"=>{"given_name"=>"firstname", "surname"=>"lastname", "familiar_name"=>"first", "display_name"=>"firstname lastname", "abbreviated_name"=>"MM"}, "membership_type"=>{".tag"=>"full"}, "joined_on"=>"2017-01-02T20:58:20Z", "groups"=>["g:6fe6b5a111cfc0400000000000000005", "g:6fe6b5a111cfc04000000000000015a1", "g:6fe6b5a111cfc0400000000000002299", "g:6fe6b5a111cfc04000000000000043cb", "g:6fe6b5a111cfc0400000000000056eb3", "g:6fe6b5a111cfc0400000000000058122", "g:6fe6b5a111cfc0400000000000058248", "g:6fe6b5a111cfc04000000000002dd0d9", "g:6fe6b5a111cfc04000000000002dd650"], "member_folder_id"=>"1384307556"}, "role"=>{".tag"=>"team_admin"}}], "cursor"=>"AAAXuLKhvS_T97ZjALBH4A2MCQW_xOp9bu0tAwqGuY1zBg_C-UKVZoBDTQkhU4Hok8nGT15IHN64ZE-88-dlT3242341WD8RgPBg5zfIOQqAdgJlc-Aw", "has_more"=>true}
我尝试使用下面的代码并返回 nil。
puts hash['profile']['team_member_id']
从上述哈希中提取单个数据的推荐方法是什么。
解决方案
hash["members"]
返回一个数组,所以你必须这样做:
hash["members"][0]["profile"]["team_member_id"]
hash["members"][0]["profile"]["name"]["display_name"]
您还可以利用在和上都可以使用的方法dig
。这个的优点是如果没有找到任何键,它就会返回:hash
array
nil
hash.dig('members', 0, 'profile', 'team_member_id')
hash.dig('members', 0, 'profile', 'name', 'display_name')
推荐阅读
- r - 由一个变量分隔并由另一个变量着色的条形图
- android - 无法从函数 Kotlin/Android Studio 返回字符串
- java - 将带分隔符的字符串映射到字符串列表或新对象
- c++ - CLion 是否支持自定义输入?如果是,我在哪里输入它们?
- css - CSS:aside #sidebar {...} 与aside#sidebar{...}
- ruby-on-rails - Rails控制台缓慢的选项卡完成?
- unit-testing - 依赖命令行参数的气流单元测试操作员
- bash - 如何通过 docker compose 或 swarm 模式运行 elasticsearch 并使用命令安装插件
- mysql - 将 Hibernate 与现有数据库一起使用
- python - 在 Python 3 中双重解包可迭代对象会删除可迭代对象?