如何检查 NodeJS 中的 JSON 是不是为空?

Posted

技术标签:

【中文标题】如何检查 NodeJS 中的 JSON 是不是为空?【英文标题】:How can I check if a JSON is empty in NodeJS?如何检查 NodeJS 中的 JSON 是否为空? 【发布时间】:2012-07-13 21:52:10 【问题描述】:

我有一个函数可以检查请求是否有任何查询,并据此执行不同的操作。目前,我有 if(query) 做别的事情。但是,似乎当没有查询数据时,我最终得到了一个 JSON 对象。因此,我需要将if(query) 替换为if(query.isEmpty()) 或类似的东西。谁能解释我如何在 NodeJS 中做到这一点? V8 JSON 对象有这种功能吗?

【问题讨论】:

if(0 < query.length) ... 不行吗? naaa,query.length == 未定义。长度是数组对象的标准,而不是 JSON 对象。 【参考方案1】:

您可以使用以下任一功能:

// This should work in node.js and other ES5 compliant implementations.
function isEmptyObject(obj) 
  return !Object.keys(obj).length;


// This should work both there and elsewhere.
function isEmptyObject(obj) 
  for (var key in obj) 
    if (Object.prototype.hasOwnProperty.call(obj, key)) 
      return false;
    
  
  return true;

示例用法:

if (isEmptyObject(query)) 
  // There are no queries.
 else 
  // There is at least one query,
  // or at least the query object is not empty.

【讨论】:

【参考方案2】:

你可以用这个:

var isEmpty = function(obj) 
  return Object.keys(obj).length === 0;

或者这个:

function isEmpty(obj) 
  return !Object.keys(obj).length > 0;

你也可以这样用:

function isEmpty(obj) 
  for(var prop in obj) 
    if(obj.hasOwnProperty(prop))
      return false;
  

  return true;

如果使用underscore 或jQuery,您可以使用他们的isEmptyisEmptyObject 调用。

【讨论】:

【参考方案3】:
Object.keys(myObj).length === 0;

由于只需要检查 Object 是否为空,因此最好直接调用本机方法 Object.keys(myObj).length 通过内部迭代 for..in loop.As @ 返回键数组987654322@ 根据对象中存在的属性返回布尔结果,该对象本身使用 for..in 循环进行迭代,时间复杂度为 O(N2)。

另一方面,调用本身具有以上两个实现或其他实现的 UDF 将适用于小对象,但如果对象大小很大,则会阻塞代码,这将对整体性能产生严重影响,除非事件中没有其他等待循环。

【讨论】:

【参考方案4】:

如果您与Object.keys 兼容,并且节点确实具有兼容性,那么您应该肯定使用它。

但是,如果您没有兼容性,并且出于任何原因使用循环函数是不可能的 - 像我一样,我使用了以下解决方案:

JSON.stringify(obj) === ''

将此解决方案视为仅在必须时才使用的“最后手段”。

在 cmets 中查看“此解决方案在很多方面并不理想”。

我有一个不得已的方案,而且效果很好。

【讨论】:

这不是一个很好的解决方案有很多原因,包括性能,以及对象可以被字符串化的各种方式,例如,用属性字符串化 Error @DaveNewton, ,我同意这不是一个很好的解决方案。我在回答中说明了这一点。我不同意错误示例,因为Object.keys(obj).length === 0 也会返回空,所以在这种情况下,这个解决方案仍然是正确的。【参考方案5】:

我的解决方案:

let isEmpty = (val) => 
    let typeOfVal = typeof val;
    switch(typeOfVal)
        case 'object':
            return (val.length == 0) || !Object.keys(val).length;
            break;
        case 'string':
            let str = val.trim();
            return str == '' || str == undefined;
            break;
        case 'number':
            return val == '';
            break;
        default:
            return val == '' || val == undefined;
    
;
console.log(isEmpty([1,2,4,5])); // false
console.log(isEmpty(id: 1, name: "Trung",age: 29)); // false
console.log(isEmpty('TrunvNV')); // false
console.log(isEmpty(8)); // false
console.log(isEmpty('')); // true
console.log(isEmpty('   ')); // true
console.log(isEmpty([])); // true
console.log(isEmpty()); // true

【讨论】:

【参考方案6】:
const isEmpty = (value) => (
    value === undefined ||
    value === null ||
    (typeof value === 'object' && Object.keys(value).length === 0) ||
    (typeof value === 'string' && value.trim().length === 0)
  )

module.exports = isEmpty;

【讨论】:

以上是关于如何检查 NodeJS 中的 JSON 是不是为空?的主要内容,如果未能解决你的问题,请参考以下文章

如何快速检查 JSON 是不是为空?

如何在javascript中执行if语句来检查JSON数组是不是为空?

Laravel/PHP - 如何检查 JSON 是不是为空? [复制]

检查 GitHub Actions 工作流程中的对象是不是为空

sencha touch 2.2.1 检查控制器中的商店是不是为空?

检查 JSON 响应数据是不是为空 [重复]