2015-08-03 8 views
1

Использование Harvest PHP API http://mdbitz.com/harvest-api/examples/ и мой урожай печатает PHP массив следующие данные:Harvest массив PHP API для JSon

$myresult = $harvestAPI->getUser($client_id); 
$data = $myresult->get("data"); 
print_r($data); 

данные:

Harvest_User Object ([_root:protected] 
=> user [_convert:protected] 
=> 1 [_values:protected] 
=> Array ([id] 
=> 999 [email] 
=> [email protected] [created-at] 
=> 2014-06-12T20:00:00Z [is-admin] 
=> false [first-name] 
=> John [last-name] 
=> Smith [timezone] 
=> Mountain Time (US & Canada) [is-contractor] 
=> false [telephone] 
=> [is-active] 
=> true [has-access-to-all-future-projects] 
=> false [default-hourly-rate] 
=> 200.0 [department] 
=> Development [dev] 
=> false [updated-at] 
=> 2015-06-15T18:00:00Z [cost-rate] 
=> 100.0)) 

, но при использовании класса JSon для CONVER его JSON, это дает мне пустую {} любую идею, что происходит?

$dataJSON = json_encode($data); 
print_r($dataJSON); 

ответ

1

Это не работает, потому что все свойства защищены. В то время как print_r является специальной функцией отладки и может отображать защищенные свойства, json_encode может читать только общедоступные свойства. Поскольку ваш объект Harvest_User не имеет общедоступных свойств, объект JSON пуст.

Класс Harvest_User наследует от Harvest_Abstract, который снова реализует методы magic __get and __set. К сожалению, json_encode не может их использовать, потому что он даже не знает, какие переменные нужно искать.

Чтобы решить вашу проблему, вы можете написать вспомогательный класс, чтобы преобразовать объекты Harvest в простые объекты PHP, а затем закодировать их в JSON.

Возможно, вы также захотите создать отчет об ошибке для Harvest и попросить их реализовать Serializable и/или JsonSerializable.