我有一个名为succeed
的python包装器方法,如下所示:
def succeed(handler, data):
"""Send the given |data| dict as a JSON response in |handler.response|."""
set_headers(handler)
handler.response.write(json.dumps(data))
我正在尝试传递Stripe API调用的结果,使用此方法将信用卡收回另一项服务。这是方法调用,在另一个类中:
succeed(self, dict(success=True, charge_id=charge.id, response=charge))
当我这样做时,我得到'充电不是JSON可序列化'错误。如何使用此代码将所有费用ID响应作为JSON传递?以下是完整的回复:
TypeError: <Charge charge id=ch_103Tsv2kD9PLZlzDG5ce7TE1 at 0x113003b50> JSON: {
"amount": 3500,
"amount_refunded": 0,
"balance_transaction": "xxxxxx",
"captured": true,
"card": {
"address_city": null,
"address_country": null,
"address_line1": null,
"address_line1_check": null,
"address_line2": null,
"address_state": null,
"address_zip": null,
"address_zip_check": null,
"country": "US",
"customer": null,
"cvc_check": "pass",
"exp_month": 5,
"exp_year": 2015,
"fingerprint": "xxxxxxxxxxxxxx",
"last4": "4242",
"name": "stackoverflow@example.com",
"object": "card",
"type": "Visa"
},
"created": 1392181282,
"currency": "usd",
"customer": null,
"description": "X0G0 FEOMSI NA",
"dispute": null,
"failure_code": null,
"failure_message": null,
"invoice": null,
"livemode": false,
"metadata": {
"email": "stackoverflow@exmple.com"
},
"object": "charge",
"paid": true,
"refunded": false,
"refunds": []
}
答案 0 :(得分:5)
使用.to_dict()
方法将Stripe充电对象变为python字典。
序列化词典是留给读者的一项练习。
作为一个额外的有趣点,我强烈建议dir
功能:它可以让你看到所有可能的属性和方法。
例如:
>>> import stripe
>>> dir(stripe.Charge)
['__class__', '__cmp__', '__contains__', '__delattr__', '__delitem__', '__dict__', '__doc__', '__eq__', '__format__', '__ge__', '__getattr__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'all', 'capture', 'class_name', 'class_url', 'clear', 'close_dispute', 'construct_from', 'copy', 'create', 'fromkeys', 'get', 'has_key', 'instance_url', 'items', 'iteritems', 'iterkeys', 'itervalues', 'keys', 'pop', 'popitem', 'refresh', 'refresh_from', 'refund', 'request', 'retrieve', 'save', 'serialize', 'serialize_metadata', 'setdefault', 'stripe_id', 'to_dict', 'update', 'update_dispute', 'values', 'viewitems', 'viewkeys', 'viewvalues']
>>>
从这里您可以看到to_dict
方法。你也可以看到serialize
方法,虽然我不清楚它的作用。
答案 1 :(得分:2)
虽然已经很晚了,但以下答案可能对某人有所帮助
根据条带团队to_dict
方法已弃用。 See here
由于 Stripe 对象是dict
的继承,我们可以将它们用作本机数据类型。
同样调用str("Stripe Object")
将返回对象的JSON表示。 See here
答案 2 :(得分:0)