首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在PHP中检查JSON对象是否为空?

如何在PHP中检查JSON对象是否为空?
EN

Stack Overflow用户
提问于 2009-09-07 13:28:11
回答 4查看 62.9K关注 0票数 24

我正在用PHP读取JSON数据,该数据包含空对象(如{})。所以问题是,我必须以不同的方式处理对象为空的情况,但我找不到足够好的方法来进行检查。empty(get_object_vars(object))看起来太可怕了,而且效率很低。有没有好的结账方式?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-09-07 14:07:11

你要反序列化多少个对象?除非empty(get_object_vars($object))或强制转换到数组被证明是一个主要的减速/瓶颈,否则我不会担心它--Greg的解决方案很好。

不过,我建议在解码$associative数据时使用JSON标志:

代码语言:javascript
复制
json_decode($data, true)

这会将JSON对象解码为普通的老PHP数组,而不是stdClass对象。然后,您可以使用empty()检查空对象,并创建用户定义类的对象,而不是使用stdClass,从长远来看,这可能是一个好主意。

票数 34
EN

Stack Overflow用户

发布于 2009-09-07 13:37:24

您可以将其转换为数组(遗憾的是,您不能在对empty()的调用中执行此操作

代码语言:javascript
复制
$x = (array)$obj;
if (empty($x))
    ...

或强制转换为数组和count()

代码语言:javascript
复制
if (count((array)$obj))
    ...
票数 26
EN

Stack Overflow用户

发布于 2011-07-27 21:06:34

我必须判断一个对象是否为空,但我也必须忽略私有和受保护的属性,所以我做了这个小函数,你可以用它来做这件事。

代码语言:javascript
复制
function empty_obj(&$object, $ignore_private = true, $ignore_protected = true) {
  $obj_name = get_class($object);
  $obj = (array)$object;

  foreach(array_keys($obj) as $prop) {
    $is_private = $is_protected = false;

    $prop = preg_replace("/[^\w*]/", '', $prop);
    $prop_name = str_replace(array($obj_name, '*'), '', $prop);

    if(preg_match("~^$obj_name$prop_name$~", $prop))
      $is_private = true;
    if(preg_match("~^\*$prop_name$~", $prop))
      $is_protected = true;

    if(!$is_private || !$is_protected || ($is_private && !$ignore_private) || ($is_protected && !$ignore_protected))
      return;
  }
  return true;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1389431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档