我正在尝试使用密钥从嵌套的JSON
中检索一个值。
我的JSON
结构如下:
如果我尝试:
puts person_id["name"]
它确实可以正常工作,但如果我尝试将电话值设为:
person_id.phone[0].["value"]
它不起作用。
如何正确访问phone value
?特别是当primary
字段为true
时?
我尝试this但没有成功。提前谢谢。
答案 0 :(得分:3)
从外观上看,person_id
是一个包含字符串键"name"
,"email"
和"phone"
的哈希值。键"phone"
的值是一个数组,其中每个元素都是一个带有键"label"
,"value"
和"primary"
的哈希值。在这种情况下你想要的是:
phone_array = person_id["phone"]
# => [ { "label" => "Work", ... }, ... ]
first_phone = phone_array[0]
# => { "label" => "Work", ... }
first_phone_value = first_phone["value"]
# => "+0109135008"
当然,您正在寻找一种方法在一行中执行此操作,如下所示:
person_id["phone"][0]["value"]
# => "+0109135008"
答案 1 :(得分:3)
您的代码唯一的问题是,当您应该使用哈希密钥访问器.phone
时,您尝试使用点方法访问器["phone"]
。
这是一个可以理解的错误。它适用于Javascript。
添加此功能实际上并不困难。 Ruby有OpenStruct
类,它是一个类似Hash的对象,可以自动添加点方法访问器。您只需要require ostruct
,这是标准库的一部分。
您可以告诉JSON.parse
自动将所有哈希转换为OpenStructs(source):
object = JSON.parse(json, object_class: OpenStruct)
或者您可以使用recursive-open-struct gem:
RecursiveOpenStruct.new(nested_hash)