Как разобрать квадратные значения ответа вложенных ключей в Ruby 2.2.10 - PullRequest
0 голосов
/ 26 марта 2019

Как бы вы получили значение ключа last_4 из этого хеша?

У меня есть одноразовый ответ от транзакции Square.Я передаю ответ через Ajax в Ruby, где он появляется в виде строки параметров.Iv'e пытался преобразовать строку в хеш.Я также попробовал JSON.parse.

Это фактический одноразовый ответ от транзакции с песочницей Square.Я урезал некоторые идентификаторы и заменил другие.Также я вставляю возврат каретки, чтобы сделать его более читабельным для человека:

{: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

Я пытался вытащить только идентификатор, который является первым вложенным ключом:

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, я могу сделать все остальное.

Спасибо.

1 Ответ

0 голосов
/ 26 марта 2019

Кэри, это сработало!

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

Спасибо! Вы не можете голосовать за ваш комментарий.

...