По умолчанию json_encode () сериализует только открытые свойства объекта. Обнародование всех свойств, которые вы хотите сериализовать, - НЕ решение! PHP 5.4 и более поздние версии имеют интерфейс JsonSerializable, но я предлагаю простое решение для более ранних версий PHP.
Поскольку JsonSerializable является только частью PHP 5.4 и более поздних версий, создайте его самостоятельно.
if (!interface_exists('JsonSerializable')) {
interface JsonSerializable {
public function jsonSerialize();
}
}
Это было не так сложно, правда? Теперь мы можем реализовать JsonSerializable, не беспокоясь о том, какую версию PHP мы используем!
class Visits_Model_Visit implements JsonSerializable {
...
// Only put properties here that you want serialized.
public function jsonSerialize() {
return Array(
'day' => $this->day,
'date' => $this->date,
'target' => $this->target,
'id' => $this->id,
'status' => $this->status,
'obj' => $this->obj->jsonSerialize(), // example for other objects
'time' => $this->time
);
}
...
}
Теперь вы можете просто вызвать jsonSerialize (), чтобы получить ассоциативный массив, который вы можете кодировать с помощью json_encode()
.
...
$entry = new Visits_Model_Visit();
$entry->setId($row->visit_id)
->setDay($row->day)
->setDate($row->date)
->setTarget($row->target)
->setStatus($row->visit_status)
->setTime($row->visit_time);
$visitsEntries[] = $entry->jsonSerialize();
...
Затем вы можете позвонить json_encode($visitsEntries)
, чтобы получить желаемый результат.
[
{
"day":"sunday",
"date":"2012-03-06",
"target":"\u0634\u0633\u064a",
"id":1,
"status":0,
"time":"12:00:00"
},
{
"day":"sunday",
"date":"2012-03-06",
"target":"clinnics",
"id":4,
"status":0,
"time":"00:00:00"
},
...
]