从javascript中的JSON对象访问多级密钥
我有一个javascript函数,它返回如下响应(我使用的是nodejs和ejs): 现在,我需要从响应中访问第二级或第三级密钥。假设我想要这样的列表:从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
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));