如何检查 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,您可以使用他们的isEmpty
或isEmptyObject
调用。
【讨论】:
【参考方案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 是不是为空?的主要内容,如果未能解决你的问题,请参考以下文章
如何在javascript中执行if语句来检查JSON数组是不是为空?
Laravel/PHP - 如何检查 JSON 是不是为空? [复制]
检查 GitHub Actions 工作流程中的对象是不是为空