2013-01-18 19 views
1

我想推送一个哈希对象到rabbitmq。 这就是我如何推动:推动和拉动rabbitmq json在ruby

msg[:gateway] = "gat1" 

    msg[:params] = { 
     :status => "2", 
     :token_id => "SADF3434FG2FG", 
     :mb_tranaction_id => "1235ABC", 
     :random_num => "#{2*rand(155)}" 
    } 

    AmqpClient.instance.publish("#{RABBIT_MQ_CONFIG['ipn_queue']}", msg.to_json) 

上它看起来像这样的输出:

{\"gateway\":\"gat1\",\"params\":{\"status\":\"2\",\"token_id\":\"SADF3434FG2FG\",\"mb_tranaction_id\":\"1235ABC\",\"random_num\":\"62\"}} 

当我拉,我试图像这样回解码为哈希对象:

msg = JSON.parse(msg) 
    p "worker: #{msg.inspect}" 

并且输出是:

"worker: {\"gateway\"=>\"skrill\", \"params\"=>{\"status\"=>\"2\", \"token_id\"=>\"SADF3434FG2FG\", \"mb_tranaction_id\"=>\"1235ABC\", \"random_num\"=>\"62\"}}" 

但是当我试图通过密钥(网关)来访问它的价值观之一msg[:gateway] 我得到一个空字符串...

+0

获取空白字符串表示'msg'实际上是一个散列,但该键不存在。尝试'msg.keys'来获取所有可用键的列表,并且您会发现它们中没有一个是符号,而是字符串。所以,用“网关”替换:网关,你很好走! – christianblais

回答

2

JSON格式,密钥字符串表示的 - 所以msg[:gateway]将无法​​正常工作 - 但会。

或者,您可以使用Rails的[with_indifferent_access][1]来通过符号访问散列。

+0

感谢您的快速响应。完全工作! – devmonster