Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.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 - Fatal编程技术网

Javascript 检查来自服务器的JSON中是否存在密钥

Javascript 检查来自服务器的JSON中是否存在密钥,javascript,Javascript,在纯JavaScript中,我想检查是否存在JSON键。JSON的格式如下(我简化): 我必须检查是否存在“c”(a.b.c),因为在某些情况下,服务器返回一个包含“d”而不是“c”的JSON 非常感谢您的帮助。使用解析json后,您可以使用Object.keys()和indexOf() var data={“a”:{“b”:{“c”:“,“d”:“t”} var result=Object.keys(data.a.b).indexOf('c')!=-1. console.log(result

在纯JavaScript中,我想检查是否存在JSON键。JSON的格式如下(我简化):

我必须检查是否存在“c”(
a.b.c
),因为在某些情况下,服务器返回一个包含“d”而不是“c”的JSON

非常感谢您的帮助。

使用解析json后,您可以使用
Object.keys()
indexOf()

var data={“a”:{“b”:{“c”:“,“d”:“t”}
var result=Object.keys(data.a.b).indexOf('c')!=-1.
console.log(result)
使用解析json后,可以使用
Object.keys()
indexOf()

var data={“a”:{“b”:{“c”:“,“d”:“t”}
var result=Object.keys(data.a.b).indexOf('c')!=-1.

log(result)
我假设服务器响应已经解析到js对象中

var abc = {"a":{"b":{"c":"","d":"t"}}};
if(abc.a.b.hasOwnProperty("c")){
 // do something
}else{
  // do something else
}

我假设服务器响应已经解析到js对象中

var abc = {"a":{"b":{"c":"","d":"t"}}};
if(abc.a.b.hasOwnProperty("c")){
 // do something
}else{
  // do something else
}

您可以使用具有属性的字符串来检查和。
功能检查(对象、路径){
返回路径.split('.').every(函数(k){
if(在本条中为k){
this.o=this.o[k];
返回true;
}
},{o:object});
}
var object={a:{b:{c:,d:{t}};
日志(检查(对象“a.b.c”);

控制台日志(检查(对象“y.b.c”)您可以使用带有属性的字符串来检查和。
功能检查(对象、路径){
返回路径.split('.').every(函数(k){
if(在本条中为k){
this.o=this.o[k];
返回true;
}
},{o:object});
}
var object={a:{b:{c:,d:{t}};
日志(检查(对象“a.b.c”);
控制台日志(检查(对象“y.b.c”)
参见jsFiddle


请参见jsFiddle

/“c”:/.test(strResponse)
请@dandavis,您能展开一点吗?@dandavis,这将检查
“c”
是否存在于任何地方,包括在其他级别或作为值。您只想检查
c
c
是否在
a.b
中?我没有注意到
所以它确实与值不匹配,但它肯定会匹配名为
c
/“c”的任何键。test(strResponse)
请@dandavis,你能稍微扩展一下吗?@dandavis,这将检查
中是否存在“c”
,包括在其他级别或作为一个值。你只想检查
c
,或者
c
是否在
a.b
中?我没有注意到
,因此它确实与值不匹配,但是它肯定会匹配任何名为
c
的键。这通常是一个不错的选择,但是要注意,如果
abc.a.b.c
是falsy(例如,它的值是0或空字符串),你最终会做同样的事情,就像它根本不在那里一样。@jcaron:这正是我来这里的原因!我在找一个不同的approach@3000您可以通过
返回a&&a.b&&a.b.c
来简化它–只有当整个对象/结构存在时,它才会提供
c
的值。这通常是一个不错的选择,但请注意,如果
abc.a.b.c
是错误的(例如,其值为0或空字符串),你最终会做同样的事情,就像它根本不在那里一样。@jcaron:这就是我来这里的原因!我在找一个不同的approach@3000您可以通过
返回a&&a.b&&a.b.c
来简化它–只有当整个对象/结构存在时,它才会提供
c
的值。
function fnIsExist(o,key2Search){
  var exist = false;
  for(var k in o){
     if(k == key2Search){
      exist = true;
    }else{
       if( typeof o[k] == 'object'){
         exist = fnIsExist(o[k],key2Search);
        }
    }
  }  
  return exist;
}

var obj = {"a":{"b":{"c":"","d":"t"}}};
var key = 'd';
var isExist = fnIsExist(obj,key); 
console.log(isExist);