首页 > 解决方案 > 将php数组转换为json(coinbase)

问题描述

我正在寻找一种从类属性中的 PHP 数组中读取数据的解决方案。

要求:

$accounts = $client->getAccounts();

这是结果数组:

Coinbase\Wallet\Resource\ResourceCollection Object
(
    [previousUri:Coinbase\Wallet\Resource\ResourceCollection:private] => 
    [nextUri:Coinbase\Wallet\Resource\ResourceCollection:private] => 
    [resources:Coinbase\Wallet\Resource\ResourceCollection:private] => Array
        (
            [0] => Coinbase\Wallet\Resource\Account Object
                (
                    [name:Coinbase\Wallet\Resource\Account:private] => BTC Wallet
                    [primary:Coinbase\Wallet\Resource\Account:private] => 1
                    [type:Coinbase\Wallet\Resource\Account:private] => wallet
                    [currency:Coinbase\Wallet\Resource\Account:private] => BTC
                    [balance:Coinbase\Wallet\Resource\Account:private] => Coinbase\Wallet\Value\Money Object
                        (
                            [amount:Coinbase\Wallet\Value\Money:private] => 0.00001
                            [currency:Coinbase\Wallet\Value\Money:private] => BTC
                        )

                    [nativeBalance:Coinbase\Wallet\Resource\Account:private] => Coinbase\Wallet\Value\Money Object
                        (
                            [amount:Coinbase\Wallet\Value\Money:private] => 0.01
                            [currency:Coinbase\Wallet\Value\Money:private] => CHF
                        )

                    [createdAt:Coinbase\Wallet\Resource\Account:private] => DateTime Object
                        (
                            [date] => 2017-11-04 01:35:13.000000
                            [timezone_type] => 2
                            [timezone] => Z
                        )

                    [updatedAt:Coinbase\Wallet\Resource\Account:private] => DateTime Object
                        (
                            [date] => 2017-11-04 14:24:11.000000
                            [timezone_type] => 2
                            [timezone] => Z
                        )

                    [id:Coinbase\Wallet\Resource\Resource:private] => XXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX
                    [resource:Coinbase\Wallet\Resource\Resource:private] => account
                    [resourcePath:Coinbase\Wallet\Resource\Resource:private] => /v2/accounts/XXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX
                    [rawData:Coinbase\Wallet\Resource\Resource:private] => Array
                        (
                            [id] => XXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX
                            [name] => BTC Wallet
                            [primary] => 1
                            [type] => wallet
                            [currency] => BTC
                            [balance] => Array
                                (
                                    [amount] => 0.001
                                    [currency] => BTC
                                )

                            [created_at] => 2017-11-04T01:35:13Z
                            [updated_at] => 2017-11-04T14:24:11Z
                            [resource] => account
                            [resource_path] => /v2/accounts/XXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX
                            [native_balance] => Array
                                (
                                    [amount] => 0.01
                                    [currency] => CHF
                                )

                        )

                )

        )

)

现在我想读取$accounts['rawData']['id']值为 XXXXXXXXX-XXXXXXXXXX-XXXXXXXXXX 我尝试将这些响应转换为 JSON 数组,如下所示:

$aaax = json_encode($accounts);
$bbbx = json_decode($aaax, true);

但它不起作用。上

print_r($bbbx)

我只收到一个

Array
(
)

你知道我如何从输出数组中读取/获取数据吗?

标签: phparraysjson

解决方案


问题是您的类的属性都具有private 可见性。这意味着您在类之外的代码无法读取或修改这些属性。

您需要修改您的类以使您的代码可以访问这些属性,或者至少告诉 PHP 在您运行时包含私有属性json_encode()。假设您不能这样做,因为这是一个库,而不是您编写的代码,您需要将该类包装在一个实现JsonSerializable.


推荐阅读