【问题标题】:How can I access elements of a JSON return from a Stripe api call?如何从 Stripe api 调用访问 JSON 返回的元素?
【发布时间】:2019-04-12 16:15:56
【问题描述】:

我正在使用 ruby​​ 和 sinatra。在调用 Stripe API 之后,我想从 JSON 返回中访问一个元素,并将其放入我的数据库中。

ruby 代码是:

需要'sinatra'

require 'stripe'
require 'pg'
require 'sequel'

get '/save_customer' do
customer = Stripe::Customer.retrieve("cus_6EfJSbJ8gCTxxx")
puts customer
last4 = customer["sources"]["data"]["last4"]
DB[:stripe_customers].insert(:user_id=>user_id, :email=>email, :stripe_customer_id=>customer_id, :stripe_customer_card=> last4)
end

JSON(取自 API 文档,不是我返回的)如下:

{
  "object": "customer",
  "created": 1431570089,
  "id": "cus_6EfJSbJ8gCTxxx",
  "livemode": false,
  "description": "Example customer",
  "email": null,
  "delinquent": false,
  "metadata": {
  },
  "subscriptions": {
    "object": "list",
    "total_count": 0,
    "has_more": false,
    "url": "/v1/customers/cus_6EfJSbJ8gCTMrd/subscriptions",
    "data": [

    ]
  },
  "discount": null,
  "account_balance": 0,
  "currency": "usd",
  "sources": {
    "object": "list",
    "total_count": 1,
    "has_more": false,
    "url": "/v1/customers/cus_6EfJSbJ8gCTMrd/sources",
    "data": [
      {
        "id": "card_162ByRBVd5ndD62KfaONcG4G",
        "object": "card",
        "last4": "4242",
        "brand": "Visa",
        "funding": "credit",
        "exp_month": 12,
        "exp_year": 2018,
        "country": "US",
        "name": null,
        "address_line1": null,
        "address_line2": null,
        "address_city": null,
        "address_state": null,
        "address_zip": "123456",
        "address_country": null,
        "cvc_check": "pass",
        "address_line1_check": null,
        "address_zip_check": "pass",
        "dynamic_last4": null,
        "metadata": {
        },
        "customer": "cus_6EfJSbJ8gCTxxx"
      }

我试过了:

last4 = customer[:data][:sources][:last4]

"" 同上。

错误信息有所不同,目前为TypeError - no implicit conversion of String into Integer。我认为这是因为我没有正确提取我需要的元素,或者这可能意味着 api 调用没有工作,但我认为它确实做到了。

【问题讨论】:

    标签: ruby sinatra stripe-payments


    【解决方案1】:

    试试这个:

    last4 = customer["sources"]["data"][0]["last4"]
    

    【讨论】:

    • 谢谢,它有效。请你能告诉我为什么需要 [0] 吗?我不明白!
    • customer["sources"]["data"]是一个数组,所以需要指定一个索引。
    • 太棒了!很高兴我能帮上忙! =]
    猜你喜欢
    • 1970-01-01
    • 2016-06-10
    • 2015-11-27
    • 2016-02-14
    • 2021-11-22
    • 2015-06-12
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多