Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 测试JSON对象包含我期望的属性_Javascript_Node.js_Express - Fatal编程技术网

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;})){