我试图从嵌套JSON
使用密钥获取一个值。Ruby Json使用密钥访问嵌套元素
我JSON
结构如下:
如果我尝试:
puts person_id["name"]
它做工精细,但这时如果我试图让手机值:
person_id.phone[0].["value"]
它不起作用。
我该如何正确访问phone value
?特别是当primary
字段是true
?我试过this但没有成功。提前致谢。
我试图从嵌套JSON
使用密钥获取一个值。Ruby Json使用密钥访问嵌套元素
我JSON
结构如下:
如果我尝试:
puts person_id["name"]
它做工精细,但这时如果我试图让手机值:
person_id.phone[0].["value"]
它不起作用。
我该如何正确访问phone value
?特别是当primary
字段是true
?我试过this但没有成功。提前致谢。
与唯一的问题你代码是当您应该使用散列键访问器["phone"]
时,您试图使用点方法访问器.phone
。
这是一个可以理解的错误。它会在Javascript中工作。
添加此功能实际上并不困难。 Ruby有OpenStruct
类,它是一个类似哈希的对象,可以自动添加点方法访问器。你只需要require ostruct
,这是标准库的一部分。
你可以告诉JSON.parse
自动所有哈希值转换为OpenStructs(source):
object = JSON.parse(json, object_class: OpenStruct)
或者你可以使用recursive-open-struct宝石:
RecursiveOpenStruct.new(nested_hash)
从外观看,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"
谢谢乔丹。它真的有效。然后,我不需要做任何改变即可获得活动手机,因为当前手机将始终处于0级别。 再次感谢。 –
欢迎堆栈溢出。不要使用图像来表示充当代码输入的数据。我们不能重复使用,必须输入,这会立即关闭您的潜在帮助。此外,链接可能会破坏然后中断,让你的问题没有意义。请阅读“[问]”,包括链接的页面和“[mcve]”。 –
@锡人解释了为什么你不应该发布代码的图像。我低估了你的问题,因为你看到了他的评论,却选择了忽略他的建议。即使你选择了答案,你也应该按照他的建议去做,因为很多SO成员将来可能会阅读你的问题。另外,请删除破折号并为哈希指定一个变量(例如,'hash = {...}'),以便读者既可以剪切,粘贴也可以引用该变量而不必定义它。我将删除你编辑的downvote。 –