我收到一些json数据,并且我JSON.parse
为哈希。散列键名称是整数字符串,如data["0"]
,data["1"]
,data["2"]
等...其中每个值对应一个状态。喜欢0 => START,1 =>停止,2 =>重新开始。
我无法更改源json数据以使密钥更具可读性。每个哈希将有5对,对应5种不同的状态。
我想知道是否有一种很好的方式让我将数字别名为有意义的名称,因此在引用哈希键值时,我不必使用该数字。
目前我正在使用下面的常量,但他们认为可能有更好的,更Ruby的方式。使用另一个哈希或结构,以便我可以使用data[STATES.start]
或其他什么?
STATE_START = "0"
STATE_STOP = "1"
STATE_RESTART = "2"
data = JSON.parse value
puts data[STATE_START]
由于
答案 0 :(得分:1)
我认为常数很好。但是如果你想稍微擦除这些代码,你可以将源哈希包装在一个将翻译方法名称的对象中。
class MyHash
def initialize(hash)
@hash = hash
end
MAPPING = {
start: '0',
stop: '1',
restart: '2',
}
# dynamically define methods like
#
# def start
# @hash['0']
# end
#
# or you can use method_missing
MAPPING.each do |method_name, hash_key|
define_method method_name do
@hash[hash_key]
end
end
end
mh = MyHash.new({'0' => 'foo', '1' => 'bar'})
mh.start # => "foo"
mh.stop # => "bar"