我有以下代码:
json_string = '{
"EmployeeName": {
"FirstName": "Lex",
"LastName": "Sharma"
}
}'
final_data = JSON.parse(json_string)
我有一个变量,它被读入给定字段的值,即
location = ['EmployeeName', 'FirstName']
所以我想以某种方式检索一行中的值,最好是之类的
value = final_data[location]
不幸的是,即使是Ruby也不那么灵活,我的语法有问题吗?有人能推荐我如何在一行中有效地获得值Lex
吗?
使用Hash#dig在运行时指定密钥
使用Ruby的Hash#dig方法可以轻松深入到关键对象的动态列表中。例如:
require 'json'
json = <<~'JSON'
{
"EmployeeName": {
"FirstName": "Lex",
"LastName": "Sharma"
}
}
JSON
# the path/query elements
keys = ['EmployeeName', 'FirstName']
# splat the array to turn array elements
# into positional arguments for Hash#dig
JSON.parse(json).dig *keys
#=> "Lex"
当然还有其他方法可以导航Hash,但#dig方法允许您将键链接为参数列表,而不是像使用一系列元素引用调用(如json[key1][key2]
(那样对键的数量进行硬编码。