首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >剥离json对象的空值

剥离json对象的空值
EN

Stack Overflow用户
提问于 2011-10-12 14:10:09
回答 7查看 26.6K关注 0票数 24

我所有的AJAX请求都是json格式的,都是用javascript解析的。

如何避免在HTML页面中显示空值,而不需要在javascript中为每个json值编写if语句?

或者我是否应该编写一个自定义的PHP函数来将数组编码为json,而不是使用json_encode(),这样它就不会显示“null”?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-10-12 15:48:53

在服务器端使用PHP,

您可以在使用json_encode之前使用array_filter

不带第二个参数的array_filter删除条目数组的空元素,例如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$object= array(
             0 => 'foo',
             1 => false,
             2 => -1,
             3 => null,
             4 => ''
          );

$object = (object) array_filter((array) $object);
$result = json_encode($object);

$result包含:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{"0":"foo","2":-1}

如您所见,null元素将被删除。

票数 30
EN

Stack Overflow用户

发布于 2013-04-11 16:24:29

我将添加到公认的答案中,因为只有当你有一个一维的对象或数组时,它才会起作用。如果有任何数组或对象嵌套,那么为了让接受的解决方案工作,您必须创建某种递归数组过滤器。不是很理想。

我和我的同事提出的最好的解决方案是在从服务器返回JSON字符串之前对其执行正则表达式。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$json = json_encode($complexObject);
echo preg_replace('/,\s*"[^"]+":null|"[^"]+":null,?/', '', $json);

正则表达式将删除形式为,"key":null的字符串中的所有位置,包括前导逗号和键开头之间的任何空格。之后,它还将匹配"key":null,,以确保在JSON对象的开头没有找到空值。

这不是一个理想的解决方案,但它比创建一个递归数组过滤器要好得多,因为一个对象可能有几个维度深。一个更好的解决方案是,如果json_encode有一个标志,让您指定是否希望空条目保留在输出字符串中。

票数 22
EN

Stack Overflow用户

发布于 2014-01-06 19:14:21

仅删除NULL,但保留FALSE''0

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function is_not_null($var)
{
    return !is_null($var);
}

echo json_encode(array_filter((array) $object, 'is_not_null'));
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7741415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文