strip null значения json объекта

Все мои запросы AJAX находятся в формате json, которые обрабатываются в javascript.

Как я могу предотвратить отображение нулевых значений на HTML-странице без необходимости писать if-statement в javascript для каждого значения json?

Или я должен написать пользовательскую функцию PHP для кодирования массива json вместо json_encode (), чтобы он не отображал «null»?

Solutions Collecting From Web of "strip null значения json объекта"

На стороне сервера с PHP,

Вы можете использовать array_filter перед json_encode .

array_filter без второго аргумента удаляет нулевые элементы массива array_filter , например:

 $object= array( 0 => 'foo', 1 => false, 2 => -1, 3 => null, 4 => '' ); $object = (object) array_filter((array) $object); $result = json_encode($object); 

Результат $result содержит:

 {"0":"foo","2":-1} 

Как вы видите, нулевые элементы удаляются.

Я собираюсь добавить к принятому ответу, потому что это будет работать, только если у вас есть одномерный объект или массив. Если есть какой-либо массив или объект, то для того, чтобы заставить принятое решение работать, вы должны создать какой-то рекурсивный фильтр массива. Не идеально.

Лучшее решение, с которым я столкнулся с коллегой, состояло в том, чтобы фактически выполнить регулярное выражение в строке JSON до того, как оно было возвращено с сервера.

 $json = json_encode($complexObject); echo preg_replace('/,\s*"[^"]+":null|"[^"]+":null,?/', '', $json); 

Регулярное выражение удалит все места в строке формы ,"key":null включая пробелы между ведущей запятой и началом ключа. Он также будет соответствовать "key":null, после чего убедитесь, что в начале объекта JSON не было найдено нулевых значений.

Это не идеальное решение, но оно намного лучше, чем создание рекурсивного фильтра массива, поскольку объект может иметь несколько измерений. Лучшим решением было бы, если бы json_encode имел флаг, который позволяет указать, хотите ли вы, чтобы нулевые записи оставались в выходной строке.

Чтобы удалить только NULL , но сохраняйте FALSE , '' и 0 :

 function is_not_null($var) { return !is_null($var); } echo json_encode(array_filter((array) $object, 'is_not_null')); 
 public function __toString() { $obj = clone $this; $keys = get_object_vars($obj); foreach ($keys as $key => $value) { if (!$value) { unset($obj->{$key}); } } return json_encode($obj); } с public function __toString() { $obj = clone $this; $keys = get_object_vars($obj); foreach ($keys as $key => $value) { if (!$value) { unset($obj->{$key}); } } return json_encode($obj); } 

Как насчет использования собственного метода JSON.stringify на стороне javascript? Вы можете установить второй параметр – функцию для удаления ключей с нулевым значением. Если вы возвращаете undefined, свойство не будет включено в строку вывода JSON (проверьте документацию для параметра «replacer» на странице https://developer.mozilla.org/en-US/docs/Using_native_JSON#The_replacer_parameter ).

 function removeNulls(obj) { var str = JSON.stringify(obj, function(key, val) { if (val == null) return undefined; return val; }); return JSON.parse(str); } 

Затем вы можете получить «нормализованный» объект JSON, вызвав:

 var obj = removeNulls(obj);