Javascript 测试JSON对象包含我期望的属性
我正在编写一个简单的Javascript 测试JSON对象包含我期望的属性,javascript,node.js,express,Javascript,Node.js,Express,我正在编写一个简单的nodejsexpress路由,它是一个JSON对象 作为一个node/js新手,我很想知道是否有一种优雅的方法来测试一个JSON对象是否包含我希望提交的所有属性,并且只包含那些属性 e、 g.如果我有一个像这样的JSON对象: data:{ "a":"somevalue". "b":"somebvalue", "c":"somecvalue" } 我在想我可以做一些类似的事情: if( (data.a) && (data.b) &
nodejs
express路由,它是一个JSON对象
作为一个node/js新手,我很想知道是否有一种优雅的方法来测试一个JSON对象是否包含我希望提交的所有属性,并且只包含那些属性
e、 g.如果我有一个像这样的JSON
对象:
data:{
"a":"somevalue".
"b":"somebvalue",
"c":"somecvalue"
}
我在想我可以做一些类似的事情:
if( (data.a) && (data.b) && (data.c) ){
//Proceed and process post
else {
// respond with unacceptable
}
我只是想知道是否有更好的方法,无论是JavaScript还是express?您的代码并不完全适合您所做的工作。例如,对于可能的有效对象
{a:undefined,b:3,c:5}
,您可能会认为它没有必需的属性,但事实上它有。更正确的方法(假设原型也很好)是:
("a" in data) && ("b" in data) && ("c" in data)
如果您希望解决方案能够很好地扩展多个属性:
您可以使用:
它并不短,但我认为它更具语义,并且对于空字符串、null和其他“falsy”值不会返回假阳性。当然-您可以将其提取到函数中:)
你是说JavaScript对象,对吗?JSON是一种序列化这些函数的方法。
JSON.parse
是一种方法……而且,您可以将该函数移动到它自己的定义中var propExistsInObject=function(){}
这样读起来就像if(['a','b','c'])。every(propExistsInObject))
@JonJaques是的,这是一个很好的触摸:)太棒了-谢谢。我采用了上面的方法,并建立了一个函数,它包含一个测试数组和测试对象。
if(["a","b","c"].every(function(attr){ return attr in data;})){