我正在访问Stripe API中的客户数据,我想将其转换为JSON。通常我会将一个对象转换为一个数组并使用json_encode()
但在这种情况下我似乎无法做到,即使在尝试访问嵌套数组时也是如此。
这是我试图转换为json的响应:
Stripe_Customer Object
(
[_apiKey:protected] => MY_KEY_IS_HERE
[_values:protected] => Array
(
[id] => cus_2dVcTSc6ZtHQcv
[object] => customer
[created] => 1380101320
[livemode] =>
[description] => Bristol : John Doe
[email] => someone6@gmail.com
[delinquent] =>
[metadata] => Array
(
)
[subscription] =>
[discount] =>
[account_balance] => 0
[cards] => Stripe_List Object
(
[_apiKey:protected] => MY_KEY_IS_HERE
[_values:protected] => Array
(
[object] => list
[count] => 1
[url] => /v1/customers/cus_2dVcTSc6ZtHQcv/cards
[data] => Array
(
[0] => Stripe_Object Object
(
[_apiKey:protected] => MY_KEY_IS_HERE
[_values:protected] => Array
(
[id] => card_2dVcLabLlKkOys
[object] => card
[last4] => 4242
[type] => Visa
[exp_month] => 5
[exp_year] => 2014
[fingerprint] => NzDd6OkHnfElGUif
[customer] => cus_2dVcTSc6ZtHQcv
[country] => US
[name] => John Doe
[address_line1] =>
[address_line2] =>
[address_city] =>
[address_state] =>
[address_zip] =>
[address_country] =>
[cvc_check] => pass
[address_line1_check] =>
[address_zip_check] =>
)
[_unsavedValues:protected] => Stripe_Util_Set Object
(
[_elts:Stripe_Util_Set:private] => Array
(
)
)
[_transientValues:protected] => Stripe_Util_Set Object
(
[_elts:Stripe_Util_Set:private] => Array
(
)
)
[_retrieveOptions:protected] => Array
(
)
)
)
)
[_unsavedValues:protected] => Stripe_Util_Set Object
(
[_elts:Stripe_Util_Set:private] => Array
(
)
)
[_transientValues:protected] => Stripe_Util_Set Object
(
[_elts:Stripe_Util_Set:private] => Array
(
)
)
[_retrieveOptions:protected] => Array
(
)
)
[default_card] => card_2dVcLabLlKkOys
)
[_unsavedValues:protected] => Stripe_Util_Set Object
(
[_elts:Stripe_Util_Set:private] => Array
(
)
)
[_transientValues:protected] => Stripe_Util_Set Object
(
[_elts:Stripe_Util_Set:private] => Array
(
)
)
[_retrieveOptions:protected] => Array
(
)
)
任何帮助都非常感谢!
答案 0 :(得分:56)
Stripe PHP API库创建的所有对象都可以使用 __ toJSON()方法转换为JSON。
Stripe::setApiKey("sk_xxxxxxxxxxxxxxxxxxxxxxxxx");
$customer = Stripe_Customer::create(array(
"card" => $token,
"plan" => $plan,
));
$customer_json = $customer->__toJSON();
还有 __ toArray($ recursive = false)方法。请记住将true设置为参数,否则将获得一个填充条纹对象的数组。
Stripe::setApiKey("sk_xxxxxxxxxxxxxxxxxxxxxxxxx");
$customer = Stripe_Customer::create(array(
"card" => $token,
"plan" => $plan,
));
$customer_array = $customer->__toArray(true);
答案 1 :(得分:4)
可以像这样访问Stripe_Object
s的属性:
$customer->attribute;
因此,要获得客户的卡last4
,您可以执行以下操作:
$customer->default_card->last4;
但是,您需要确保已填充default_card
属性。您可以通过传递default_card
参数,与客户的其余部分同时检索expand
对象:
$customer = Stripe_Customer::retrieve(array(
"id" => "cus_2dVcTSc6ZtHQcv",
"expand" => array("default_card")
));
答案 2 :(得分:0)
如果像我一样,您是来这里寻找python 2.7
解决方案的,只需将stripe_object
强制转换为str()
。这将触发对象的内部__str__()
函数,该函数会将对象转换为JSON字符串。
例如
charge = stripe.Charge....
print str(charge)
答案 3 :(得分:0)
在最新版本上,您可以使用echo $customer->toJSON();
将输出作为JSON获取。
答案 4 :(得分:0)
$ gradle build
答案 5 :(得分:-1)
您的顶级对象包含其他对象实例 - 强制转换为(数组)仅影响顶级元素。你可能需要以递归的方式向下走 - 但是我在这里做的不同,因为这些类是可序列化的:
$transfer = serialize($myobject);
你打算用JSONified数据做什么?
如果您要转移没有类信息的对象,可以尝试使用Reflection:
abstract class Object {
/**
* initialize an object from matching properties of another object
*/
protected function cloneInstance($obj) {
if (is_object($obj)) {
$srfl = new ReflectionObject($obj);
$drfl = new ReflectionObject($this);
$sprops = $srfl->getProperties();
foreach ($sprops as $sprop) {
$sprop->setAccessible(true);
$name = $sprop->getName();
if ($drfl->hasProperty($name)) {
$value = $sprop->getValue($obj);
$propDest = $drfl->getProperty($name);
$propDest->setAccessible(true);
$propDest->setValue($this,$value);
}
}
}
else
Log::error('Request to clone instance %s failed - parameter is not an object', array(get_class($this)));
return $this;
}
public function stdClass() {
$trg = (object)array();
$srfl = new ReflectionObject($this);
$sprops = $srfl->getProperties();
foreach ($sprops as $sprop) {
if (!$sprop->isStatic()) {
$sprop->setAccessible(true);
$name = $sprop->getName();
$value = $sprop->getValue($this);
$trg->$name = $value;
}
}
return $trg;
}
}
这是我的大多数可转移类的基类。它从类创建stdClass对象,或从stdClass对象初始化类。您可以根据自己的需要轻松采用此方法(例如创建一个数组)。
答案 6 :(得分:-1)
这已经是JSON格式,因此您需要将其再次转换为json_encode() 只需将其传递到您的脚本