在Ruby中,我想知道如何最好地处理从json哈希获取变量,然后仅在存在变量时进行处理,否则会引发错误。
这是一些示例代码:
digest = cover_id(map)
def cover_id(a_map)
cover_from_map = a_map['metadata']['cover'][0]['@']
a_map['resources'].find {|resource| resource['id']==cover_from_map}['-major-md5-digest']
end
有两件事我不清楚如何最好地处理:
song_map['metadata']['cover'][0]['@']
-这只是使用song_map.key?(['metadata']['cover'][0]['@'])
的一种情况。我觉得使用这种方式意味着我已经重复了代码?基本上,根据我现在所知道的,我正在思考:
digest = cover_id(map) rescue nil
def cover_id(a_map)
unless a_map['metadata']['cover'][0]['@'] return nil
cover_from_map = a_map['metadata']['cover'][0]['@']
a_map['resources'].find {|resource| resource['id']==cover_from_map}['-major-md5-digest']
end
但是我认为如果a_map['metadata']['cover'][0]['@']
实际上不存在,那将无法解决。
任何帮助表示赞赏。
答案 0 :(得分:0)
检查哈希的方法dig
:
https://ruby-doc.org/core-2.3.0_preview1/Hash.html#method-i-dig
h = { foo: {bar: {baz: 1}}}
h.dig(:foo, :bar, :baz) #=> 1
h.dig(:foo, :zot) #=> nil