在需要对外提供服务接口的时候,常常需要把从数据库中查询出来的数据对象转换为JSON格式的数据
Yii中提供很有用的方法:
CJSON::encode($object)
但该方法的缺省实现不能把关联对象的数据包含进去。
要输出关联数据,需要自己派生CJSON并重写encode方法:
case 'object':
if ($var instanceof Traversable)
{
$vars = array();
foreach ($var as $k=>$v)
$vars[$k] = $v;
}
else
$vars = get_object_vars($var);
// related
foreach ($var->relations() as $key => $related)
{
if ($var->hasRelated($key))
{
$vars[$key] = $var->$key;
}
}
return '{' .
join(',', array_map(array('CJSON', 'nameValue'),
array_keys($vars),
array_values($vars)))
. '}';
iefreer