首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将php数组转换为json (coinbase)

将php数组转换为json (coinbase)
EN

Stack Overflow用户
提问于 2018-06-24 08:04:51
回答 2查看 83关注 0票数 0

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

请求:

代码语言:javascript
复制
$accounts = $client->getAccounts();

下面是生成的数组:

代码语言:javascript
复制
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
                                )

                        )

                )

        )

)

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

代码语言:javascript
复制
$aaax = json_encode($accounts);
$bbbx = json_decode($aaax, true);

但它不起作用。在……上面

代码语言:javascript
复制
print_r($bbbx)

我只收到一个

代码语言:javascript
复制
Array
(
)

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-24 08:13:24

问题是您的类的所有属性都有private visibility。这意味着类外部的代码不能读取或修改这些属性。

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

票数 0
EN

Stack Overflow用户

发布于 2018-06-25 02:57:25

感谢Ed Cottrell的帮助以及对技术术语的更正。这对我来说是最好的学习方式。我试着用JsonSerializable::jsonSerialize来解决这个问题。不可能(对我来说...)

现在我找到了访问数据的另一种解决方案。我使用的是php包装器:https://github.com/coinbase/coinbase-php

在RawData上有一种访问方法

代码语言:javascript
复制
$data = $client->decodeLastResponse();

在我的例子中,有以下代码:

代码语言:javascript
复制
$accounts = $client->getAccounts();
$dataX = $client->decodeLastResponse();
print_r($dataX);

因此,我获得了以下响应:

代码语言:javascript
复制
Array
(
    [pagination] => Array
        (
            [ending_before] => 
            [starting_after] => 
            [limit] => 25
            [order] => desc
            [previous_uri] => 
            [next_uri] => 
        )

    [data] => Array
        (
            [0] => Array
                (
                    [id] => XXXXXXXXXXXXXXXXXXX
                    [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/XXXXXXXXXXXXXXXXXXX
                    [native_balance] => Array
                        (
                            [amount] => 0.001
                            [currency] => CHF
                        )

                )

        )

)

所以它是完全可访问的再次感谢你(为我打开了思路..:-)我通过谷歌搜索"coinbase jsonserialize“找到了这个解决方案...这是你的输入..

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51005971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档