Невозможно напечатать определенное поле в теле json

#python #json

#python #json

Вопрос:

Мне нужно напечатать поле с именем "payment_intent" в моем теле JSON. В настоящее время мне это не удается. Похоже, я запрашиваю правильный параметр.

Я пробовал вот так

 payment_intent = event['data']['object']['payment_intent']
  

Мое тело JSON:

 {
  "object": {
    "id": "",
    "object": "payment_intent",
    "amount": 100,
    "amount_capturable": 0,
    "amount_received": 100,
    "application": null,
    "application_fee_amount": null,
    "canceled_at": null,
    "cancellation_reason": null,
    "capture_method": "automatic",
    "charges": {
      "object": "list",
      "data": [
        {
          "id": "",
          "object": "charge",
          "amount": 100,
          "amount_refunded": 0,
          "application": null,
          "application_fee": null,
          "application_fee_amount": null,
          "balance_transaction": "",
          "billing_details": {
            "address": {
              "city": null,
              "country": "",
              "line1": null,
              "line2": null,
              "postal_code": null,
              "state": null
            },
            "email": "",
            "name": "",
            "phone": null
          },
          "captured": true,
          "created": 1554414723,
          "currency": "usd",
          "customer": "",
          "description": null,
          "destination": null,
          "dispute": null,
          "failure_code": null,
          "failure_message": null,
          "fraud_details": {
          },
          "invoice": null,
          "livemode": true,
          "metadata": {
          },
          "on_behalf_of": null,
          "order": null,
          "outcome": {
            "network_status": "approved_by_network",
            "reason": null,
            "risk_level": "normal",
            "seller_message": "Payment complete.",
            "type": "authorized"
          },
          "paid": true,
          "payment_intent": "pi_1ELdTCB2MQ8LEk6k2PTkpRd0",
          "payment_method_details": {
            "card": {
              "brand": "visa",
              "checks": {
                "address_line1_check": null,
                "address_postal_code_check": null,
                "cvc_check": "pass"
              },
              "country": "DK",
              "exp_month": ,
              "exp_year": ,
              "fingerprint": "",
              "funding": "",
              "last4": "",
              "three_d_secure": null,
              "wallet": null
            },
            "type": "card"
          },
          "receipt_email": "",
          "receipt_number": "1308-6739",
          "receipt_url": "",
          "refunded": false,
          "refunds": {
            "object": "list",
            "data": [
            ],
            "has_more": false,
            "total_count": 0,
            "url": "/v1/charges/ch_1ELdTbB2MQ8LEk6kOQQd5T9n/refunds"
          },
          "review": null,
          "shipping": null,
          "source": {
            "id": "",
            "object": "source",
            "amount": null,
            "card": {
              "exp_month": ,
              "exp_year": ,
              "last4": "",
              "country": "",
              "brand": "",
              "cvc_check": "",
              "funding": "debit",
              "fingerprint": "",
              "three_d_secure": "optional",
              "name": null,
              "address_line1_check": null,
              "address_zip_check": null,
              "tokenization_method": null,
              "dynamic_last4": null
            },
            "client_secret": "",
            "created": 15,
            "currency": null,
            "customer": "",
            "flow": "none",
            "livemode": true,
            "metadata": {
            },
            "owner": {
              "address": {
                "city": null,
                "country": "DK",
                "line1": null,
                "line2": null,
                "postal_code": null,
                "state": null
              },
              "email": "",
              "name": "",
              "phone": null,
              "verified_address": null,
              "verified_email": null,
              "verified_name": null,
              "verified_phone": null
            },
            "statement_descriptor": null,
            "status": "chargeable",
            "type": "card",
            "usage": "reusable"
          },
          "source_transfer": null,
          "statement_descriptor": null,
          "status": "succeeded",
          "transfer_data": null,
          "transfer_group": null
        }
      ],
      "has_more": false,
      "total_count": 1,
      "url": "/v1/charges?payment_intent=pi_1ELdTCB2MQ8LEk6k2PTkpqweEwwRd0"
    },
    "confirmation_method": "automatic",
    "created": 1554414698,
    "currency": "usd",
    "customer": "",
    "description": null,
    "last_payment_error": null,
    "livemode": true,
    "metadata": {
    },
    "next_action": null,
    "on_behalf_of": null,
    "payment_method_types": [
      "card"
    ],
    "receipt_email": null,
    "review": null,
    "shipping": null,
    "source": "",
    "statement_descriptor": null,
    "status": "succeeded",
    "transfer_data": null,
    "transfer_group": null
  }
}
  

Комментарии:

1. Кажется, что вы проходите неправильный путь для печати такого параметра. Кстати, трудно сказать с этой информацией, которую вы предоставили в вопросе. Будьте конкретнее, если можете, и укажите больше деталей.

2. Если вы думаете о том, откуда event берется, то я могу подтвердить, что проблема не в этом. Проблема заключается в неправильном пути, как вы упомянули. Я просто не уверен, как перейти на правильный путь. Никогда раньше не использовал JSON.

3. Является event корнем объекта json? если это так, то вам нужно напечатать что-то вроде этого: событие [«объект»][«начисления»][«данные»][0][«payment_intent»]

4. используйте print() для проверки каждого элемента — print(event) , next print(event['data']) , next print(event['data']['object']) . Вы также можете использовать type() , чтобы посмотреть, есть ли у вас словарь или список — ie. print( type(event['data']) ) . Если у вас есть словарь, вы можете использовать .keys() для просмотра ключей в dictionary — ie. print( event['data'].keys() ) . Если у вас есть list, вам нужно использовать [0] o test first element. ie. type print( type(event['object']['charges']['data'][0]) ) и keys print( event['object']['charges']['data'][0].keys() )