Преобразуйте массив php в json (coinbase) - PullRequest
0 голосов
/ 24 июня 2018

Я ищу решение для чтения данных из массива 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
(
)

Знаете ли вы, как я могу читать / получать данные из выходного массива?

Ответы [ 2 ]

0 голосов
/ 24 июня 2018

Спасибо, Эд Коттрелл, за вашу помощь, а также за исправления технических условий. Это лучший способ для меня учиться. Я попытался решить эту проблему с помощью JsonSerializable :: jsonSerialize. Ни за что (для меня ...)

Теперь я нашел другое решение для доступа к данным. Я использую PHP-обертку: https://github.com/coinbase/coinbase-php

Существует метод доступа к RawData

$data = $client->decodeLastResponse();

На мой случай следующий код:

$accounts = $client->getAccounts();
$dataX = $client->decodeLastResponse();
print_r($dataX);

Итак, я получаю следующий ответ:

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
                        )

                )

        )

)

Так что это прекрасно доступно Еще раз спасибо (за то, что открыли мой разум .. :-)) Я нашел это решение с помощью поиска Google "coinbase jsonserialize" ... это был ваш вклад ..

0 голосов
/ 24 июня 2018

Проблема в том, что все свойства вашего класса имеют private видимость . Это означает, что ваш код вне класса не может читать или изменять эти свойства.

Вам нужно изменить свой класс, чтобы сделать свойства доступными для вашего кода, или, по крайней мере, сказать PHP включить личные свойства при запуске json_encode(). Предполагая, что вы не можете этого сделать, потому что это библиотека, а не код, который вы написали, вам нужно обернуть класс в класс-оболочку, который реализует JsonSerializable.

...