我的所有AJAX请求都是json格式,正在javascript中解析.
如何防止在HTML页面中显示空值而无需在javascript中为每个json值编写if语句?
或者我应该编写一个自定义PHP函数来将数组编码为json而不是使用json_encode(),因此它不显示'null'?
mas*_*oud 21
在PHP的服务器端,
你array_filter以前可以使用json_encode.
array_filter没有第二个参数会删除条目数组的null元素,例如:
$object= array(
0 => 'foo',
1 => false,
2 => -1,
3 => null,
4 => ''
);
$object = (object) array_filter((array) $object);
$result = json_encode($object);
Run Code Online (Sandbox Code Playgroud)
该$result包含:
{"0":"foo","2":-1}
Run Code Online (Sandbox Code Playgroud)
如您所见,删除了null元素.
Jim*_* S. 21
我将添加到已接受的答案中,因为只有拥有1维对象或数组才会有效.如果有任何数组或对象嵌套,那么为了使接受的解决方案起作用,您必须创建某种递归数组过滤器.不理想.
我和我的同事提出的最佳解决方案是在从服务器返回之前在JSON字符串上实际执行正则表达式.
$json = json_encode($complexObject);
echo preg_replace('/,\s*"[^"]+":null|"[^"]+":null,?/', '', $json);
Run Code Online (Sandbox Code Playgroud)
正则表达式将删除表单字符串中的所有位置,,"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'));
Run Code Online (Sandbox Code Playgroud)
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);
}
Run Code Online (Sandbox Code Playgroud)