Мое приложение должно создавать json объекта с большим свойством data
типа массива. Массив должен оставаться в памяти, когда он собирает вывод DB, а некоторые свойства могут быть определены только после завершения массива.Как сериализовать большие объекты/массивы в JSON
Усложнение: массив численно основан и должен отображаться как таковой на выходе json, поэтому прямой json_encode()
не является вариантом.
Чтобы сделать это возможным на низкой спецификации машин, как RasPi я заглянула в подстроечного потребление памяти:
- Использование
SPLFixedArray
- Использование
string
иpack()
Оба подхода заботиться о проблема с памятью массива, но с ошибкой, когда дело доходит до кодирования в JSON.
Я посмотрел в реализации JsonSerializable
, но как это вынуждает пользователей возвращать результат, который затем закодированный в Json я вернулся к
public function jsonSerialize() {
return $this->toArray();
}
, который имеет те же проблемы с памятью.
zendframework/Component_ZendJson
выглядит многообещающим, как это выглядит для объектов, имеющих метод toJson()
, чтобы обеспечить свою собственную кодировку, string
вместо object
.
Мне интересно, есть ли лучшие варианты, которые не дают проблем с памятью?
Я уверен, что то, что вы делаете, намного выше моей головы, но PHP изначально имеет ** [json_encode] (http://us2.php.net/json_encode) **. Если он не применяется, я могу удалить этот комментарий =) – MonkeyZeus
Хороший улов. Разумеется, есть причина, о которой я забыл упомянуть. Облом. Осложнение: массив основан на численном выражении и должен отображаться как таковой в выводе json, поэтому прямой 'json_encode()' не является опцией. – andig
Это? http://stackoverflow.com/a/4844309/46675 –