如何在Ruby 2.2.10中解析Square响应嵌套键值

问题描述 投票:0回答:1

你如何从这个哈希中获得last_4键的值?

我有一个Square事务的响应nonce。我将响应通过Ajax传递给Ruby,它作为参数字符串出现。我试过将字符串转换为哈希值。我也试过JSON.parse。

这是Square沙箱事务中的实际响应nonce。我已经截断了一些ID并替换了其他ID。此外,我放入回车,使其更具人性化:

{:transaction=>{
    :id=>"smqfzS00qbp1lOy...", 
    :location_id=>"CBASE...", 
    :created_at=>"2019-02-19T19:45:18Z", 
    :tenders=>[{
        :id=>"34670bfa-9d09-406a-910c-9c3e8ab82321", 
        :location_id=>"CBASE...", 
        :transaction_id=>"smqfzS00qbp1lOy...", 
        :created_at=>"2019-02-19T19:45:18Z", 
        :note=>"Online Transaction", 
        :amount_money=>{
            :amount=>65000, 
            :currency=>"USD"
            }, 
        :type=>"CARD", 
        :card_details=>{
                :status=>"CAPTURED", 
                :card=>{
                    :card_brand=>"VISA", 
                    :last_4=>"9999", 
                    :fingerprint=>"22737c9b012a..."
                    }, 
        :entry_method=>"KEYED"
        }
    }], 
    :product=>"EXTERNAL_API"
    }
}

我把它作为ajax调用的字符串并将其转换为哈希或解析它:

sqresp = Hash.new(square_resp) # this works
sqresp = JSON.parse(square_resp) # this fails

我试过拔出id,这是第一个嵌套键:

sqresp[:transaction] # this works but I get the whole string

但是,如果我更深入,它会失败:

sqresp[:transaction][:id] # this fails
sqresp[:transaction[:id]] # kinda makes sense but fails
sqresp[:transaction][:tenders][:amount_money][:card_details][:card][:last_4] # of course this fails too,it's just a deeper scrape.

有一个Ruby方法可以打破所有Square键/值会很棒,但是有一个如何拉出last_4的例子,我可以做其余的事情。

谢谢。

ruby string hash square
1个回答
0
投票

卡里,那工作!

sqresp = instance_eval(square_resp)
sqresp[:transaction][:tenders].first[:card_details][:card][:last_4]

谢谢!没有选择投票给你的评论。

© www.soinside.com 2019 - 2024. All rights reserved.