RUBY-处理JSON HASH时可能不存在键



在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

最新更新