我正在使用Steam Storefront API - http://store.steampowered.com/api/appdetails/?appids=240
我已将JSON解析为哈希值。
当我尝试选择嵌套在" data"内的任何哈希值时我收到一个"未定义的方法`[]'为零:NilClass"错误。
我puts
可以res["240"]["data"]
使用res["240"]["data"]["type"]
向我展示所有的键和值。所有这些看起来都很好。
然而,当我尝试进一步分支时,它会抛出零。
.key
使用res["240"]["data"].key
也会引发错误。
ToUniveralTime
我寻求答案的主要内容主要是找到了搜索密钥和答案的建议。价值,但我知道数据的直接路线,所以我想尽可能走这条路。
感谢。
答案 0 :(得分:4)
如果您使用的是ruby 2.3,则可以按照@sawa的建议使用dig
。
http://docs.ruby-lang.org/en/2.3.0/Hash.html#method-i-dig
但是,如果你没有使用ruby 2.3,那么事情会变得有点棘手。
最简单的方法是实现自己的dig版本:
class Hash
def dig(*path)
path.inject(self) do |h, k|
h.respond_to?(:keys) ? h[k] : nil
end
end
end
然后你可以res.dig("240", "data", "type")
答案 1 :(得分:3)
您可以将dig
与safe navigation operator结合使用,例如:
res&.dig("240", "data", "type")
如果res
是nil
(或更准确地说是“ dig
不可行”),它将返回nil
而不是加注。
答案 2 :(得分:1)
使用dig
。
res.dig("240", "data", "type")