1

使用 Harvest php API http://mdbitz.com/harvest-api/examples/和我的 Harvest php 数组打印以下数据:

$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] 
=> user@example.com [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 类将其转换为 json 时,它给了我空的 {} 任何想法发生了什么?

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

1 回答 1

1

它不起作用,因为所有属性都受到保护。Whileprint_r是一个特殊的调试功能,可以显示受保护的属性,json_encode只能读取公共属性。由于您的Harvest_User对象没有任何公共属性,因此 JSON 对象为空。

该类Harvest_User继承自Harvest_Abstract,它再次实现了魔法__get__set方法。不幸的是,json_encode不能使用它们,因为它甚至不知道要查找哪些变量。

为了解决您的问题,您可以编写一个帮助类来将 Harvest 对象转换为普通的 PHP 对象,然后将它们编码为 JSON。

您可能还想为 Harvest 创建一个错误报告并要求他们实施Serializable和/或JsonSerializable.

于 2015-08-03T21:44:57.420 回答