Ruby-当密钥可能不存在时处理JSON哈希

时间:2019-02-21 08:19:02

标签: ruby

在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]['@'])的一种情况。我觉得使用这种方式意味着我已经重复了代码?
  • 除了硬编码为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]['@']实际上不存在,那将无法解决。

任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

检查哈希的方法dighttps://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