Я собираюсь добавить к ответу, данному El Yobo, потому что это будет работать, только если у вас есть одномерный объект или массив. Если имеется какое-либо вложение массива или объекта, то для того, чтобы заставить принятое решение работать, вы должны создать своего рода фильтр рекурсивного массива. Не хорошо.
Лучшее решение, которое придумали мы с коллегой, - на самом деле выполнить регулярное выражение для строки JSON, прежде чем оно будет возвращено с сервера.
$json = json_encode($complexObject);
echo preg_replace('/,\s*"[^"]+":null|"[^"]+":null,?/', '', $json);
Регулярное выражение удалит все места в строке формы ,"key":null
, включая любые пробелы между начальной запятой и началом ключа. Это также будет соответствовать «ключу»: null, впоследствии, чтобы удостовериться, что нулевые значения не были найдены в начале объекта JSON.
Это, очевидно, не самая идеальная ситуация, но она эффективно удалит пустые записи без необходимости разработки какого-либо фильтра рекурсивного массива.