Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.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_Json_Node.js_Ejs - Fatal编程技术网

从javascript中的JSON对象访问多级密钥

从javascript中的JSON对象访问多级密钥,javascript,json,node.js,ejs,Javascript,Json,Node.js,Ejs,我有一个javascript函数,它返回如下响应(我使用的是nodejs和ejs): 现在,我需要从响应中访问第二级或第三级密钥。假设我想要这样的列表: type_1 type_2 或 我该怎么做?如果我使用回调(Object.keys(response))则返回index_1。有人能给我指出正确的方向吗?要获取子对象的关键点,需要将此特定子对象传递给对象。关键点(): var data={“index_1”:{“mappings”:{“type_1”:{“properties”:{“fie

我有一个javascript函数,它返回如下响应(我使用的是nodejs和ejs):

现在,我需要从响应中访问第二级或第三级密钥。假设我想要这样的列表:

type_1
type_2


我该怎么做?如果我使用
回调(Object.keys(response))
则返回
index_1
。有人能给我指出正确的方向吗?

要获取子对象的关键点,需要将此特定子对象传递给
对象。关键点()

var data={“index_1”:{“mappings”:{“type_1”:{“properties”:{“field_1”:{“type”:“string”},“field_2”:{“type”:“string”}},“type_2”:{“properties”:{“field_1”:{“type”:“string”},“field u 2”:{“type”:“string”},“field 3”:{“type”:“string”};
log(Object.keys(data.index_1.mappings));
//[“类型1”、“类型2”]
log(Object.keys(data.index_1.mappings.type_2.properties));

//[“field_1”、“field_2”、“field_3”]
我想没有简单的一行

Object.keys( object );
仅返回第一级键(这就是您获得索引1的原因)

解决方案1

如果你知道的话,这种反应总是有一个结构:

var jsonObject = {
   "index_1" : { 
       "mappings": {
            "type1" : ... ,
            "type2" : ...
       }
};
那么你只需要通过:

callback(Object.keys(jsonObject.index1.mappings));
这样你就可以得到三级钥匙

但是如果您不知道结构,或者想要访问任何级别的键,那么递归可能会有所帮助

var jsonObject = {
   "index_1" : {
       "mappings": {
            "type1" : { field1 : {}, field2 : 2} ,
            "type2" : {}
       }
   }
};

// 1..N, and 1 means you want to get **index_1**
function getNthLevelKeys( json, level ) {
      var keys = [];
      var currLvlKeys = Object.keys(json);
      level = level - 1;

      if ( typeof json !== 'object' || json === null) {
          return [];
      }

      if ( level > 0 ) {

           for (var i = 0; i < currLvlKeys.length; i++) {
               keys = keys.concat(getNthLevelKeys( json[ currLvlKeys[i] ] , level ));
            }
      }

      if (level === 0) {
            return currLvlKeys;
      }

      if (level < 0) {
           throw new Error("Cannot access level "+level+" of this object");
      }

      return keys;
}

console.log(getNthLevelKeys( jsonObject , 1));
console.log(getNthLevelKeys( jsonObject , 2));
console.log(getNthLevelKeys( jsonObject , 3));
console.log(getNthLevelKeys( jsonObject , 4));
var jsonObject={
“索引_1”:{
“映射”:{
“类型1”:{field1:{},field2:2},
“类型2”:{}
}
}
};
//1..N,1表示要获取**索引\u 1**
函数getNthLevelKeys(json,级别){
var键=[];
var currLvlKeys=Object.keys(json);
级别=级别-1;
if(typeof json!='object'| | json===null){
返回[];
}
如果(级别>0){
对于(变量i=0;i
您需要一个特定的字段或类型,还是要为每个字段或类型执行某些操作?
callback(Object.keys(jsonObject.index1.mappings));
var jsonObject = {
   "index_1" : {
       "mappings": {
            "type1" : { field1 : {}, field2 : 2} ,
            "type2" : {}
       }
   }
};

// 1..N, and 1 means you want to get **index_1**
function getNthLevelKeys( json, level ) {
      var keys = [];
      var currLvlKeys = Object.keys(json);
      level = level - 1;

      if ( typeof json !== 'object' || json === null) {
          return [];
      }

      if ( level > 0 ) {

           for (var i = 0; i < currLvlKeys.length; i++) {
               keys = keys.concat(getNthLevelKeys( json[ currLvlKeys[i] ] , level ));
            }
      }

      if (level === 0) {
            return currLvlKeys;
      }

      if (level < 0) {
           throw new Error("Cannot access level "+level+" of this object");
      }

      return keys;
}

console.log(getNthLevelKeys( jsonObject , 1));
console.log(getNthLevelKeys( jsonObject , 2));
console.log(getNthLevelKeys( jsonObject , 3));
console.log(getNthLevelKeys( jsonObject , 4));