概要
PAYJPを使って支払の処理をするのに、JSONに慣れておらず、またrubyの理解不足でなかなかデータを取り出せなかったのでその備忘録です。
初心者ゆえ何か間違い等ありましたらご指摘くださいませ。。
具体例
コントローラーでbinding.pryをして、
customer = Payjp::Customer.createした
カスタマーのカード情報を取り出します。
pry(#)> customer[:cards]
#Payjp::ListObject:0x3feb68d9adbc JSON: {
"count": 1,
"data": [
{"id":"ca......
],
"has_more": false,
"object": "list",
"url": "/v1/customers/cus_96a3f6019fb2023a6d784...../cards"
customer[:cards][:data]とすると。。
=> [# JSON: {
"id": "car_276ef*************",
"address_city": null,
"address_line1": null,
"address_line2": null,
"address_state": null,
"address_zip": null,
"address_zip_check": "unchecked",
"brand": "Visa",
"country": null,
"created": 1550055737,
"customer": "cus_96a3f6019fb2023a6*********",
"cvc_check": "passed",
"exp_month": 10,
"exp_year": 2020,
"fingerprint": "e1d8225886e3a7211127d*********",
"last4": "4242",
"livemode": false,
"metadata": {},
"name": "AAA AAA",
"object": "card"
}]
ここからカードブランドがvisaてところを取り出したい。
とりあえずcustomer[:cards][:data][:brand]としてみるものの。。。
TypeError: no implicit conversion of Symbol into Integerとなる際の解決法
TypeError: no implicit conversion of Symbol into Integerとなる。
ここでkeyがシンボルではなく文字列であることに気づいた!!
初歩的ミス。。。
customer[:cards][:data]["brand"]とすると。。。
TypeError: no implicit conversion of String into Intege
まだダメ。。。
しかし!よく見たらdataの後ろに"["があり、これは配列を意味するので、
このようにして無事取り出せました。
customer[:cards][:data][0]["brand"]
=> "Visa"
# 参考にした記事
https://qiita.com/QUANON/items/169c73425a6bc50dee51
https://stackoverflow.com/questions/20790499/no-implicit-conversion-of-string-into-integer-typeerror