在Ruby中,我想知道如何最好地处理从JSON HASH获得变量,然后仅在存在时进行操作,否则会引起错误。
所以这里有一些示例代码:
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]['@'])
的情况。我觉得使用这种方法意味着我已经重复了代码? - 而不是硬编码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]['@']
实际上不存在,那不会处理。
任何帮助。
检查哈希的方法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