2016-11-10 77 views
1

我試圖訪問我的嵌套數組的鍵和值是這樣的:如何訪問嵌套的JSON對象鍵和值

var obj = $.getJSON("mydata.json", function() { 
    console.log("load success"); 
}); 

Object.keys(obj[2].type).forEach(function(key) { 
    console.log(key, obj[key]); 
}); 

但我得到一個錯誤。

這裏是JSON文件的結構:

{ 
"nodes": [ 
    { 
     "nd": "nd1", 
     "cat": "cat1" 
    } 
], 
"links": [ 
    { 
     "id": 100 
    } 
], 
"types": [ 
      { 
       "type": "one", 
       "image": "image001" 
      }, 
      { 
       "type": "two", 
       "image": "image002" 
      }, 
      { 
       "type": "three", 
       "image": "image003" 
      } 
     ] 

}

我的目標是獲得的值的列表:

一二三

+0

你什麼錯誤? –

+0

'var vals = obj.types.map((x)=> x.image;});' – sed

+0

這個工程對象 – Dimitri

回答

1

像那樣的東西?

您必須首先訪問object.types屬性,然後遍歷它以檢索每個類型。

var object = { 
 
    "nodes": [{ 
 
    "nd": "nd1", 
 
    "cat": "cat1" 
 
    }], 
 
    "links": [{ 
 
    "id": 100 
 
    }], 
 
    "types": [{ 
 
    "type": "one", 
 
    "image": "image001" 
 
    }, { 
 
    "type": "two", 
 
    "image": "image002" 
 
    }, { 
 
    "type": "three", 
 
    "image": "image003" 
 
    }] 
 
}; 
 

 

 
function parseJson(object){ 
 
    object.types.forEach(function(key) { 
 
     console.log(key.type); 
 
    }); 
 
} 
 

 
parseJson(object);

---更新在評論前面回答的問題---

你可以附上一個函數的代碼,並調用它,當你加載你的JSON:

$.getJSON("mydata.json", function(data) { 
    parseJson(data); 
}); 
+0

沒有鍵2,但是如何從外部文件加載它。我怎麼用'getJSON'命令做到這一點? – passion

1

Object.keys(obj[2].type)這裏沒有意義。您不是迭代任何對象的屬性,而是訪問一組對象中的相同屬性。這是map所做的。

var types = obj.types.map(x => x.type); 
+0

不是'map(x => x.type)'TypeScript語法嗎? –

+0

@VitaliiStrimbanu:可能也是這樣,但它也是EcmaScript 6。 –

0

您可以使用此代碼做到這一點:

var obj = { 
 
"nodes": [ 
 
    { 
 
     "nd": "nd1", 
 
     "cat": "cat1" 
 
    } 
 
], 
 
"links": [ 
 
    { 
 
     "id": 100 
 
    } 
 
], 
 
"types": [ 
 
      { 
 
       "type": "one", 
 
       "image": "image001" 
 
      }, 
 
      { 
 
       "type": "two", 
 
       "image": "image002" 
 
      }, 
 
      { 
 
       "type": "three", 
 
       "image": "image003" 
 
      } 
 
     ] 
 
}; 
 

 
Object.keys(obj["types"]).forEach(function(key) { 
 
    console.log(obj["types"][key].image); 
 
});

1

$ .getJSON返回一個承諾,因爲它是異步的,但你可以在回調設置您的變量:

var obj; 
$.getJSON("mydata.json", function(data) { 
    obj = data; 
    Object.keys(obj[2].type).forEach(function(key) { 
     console.log(key, obj[key]); 
    }); 
}); 

link to documentation

1

你應該發佈你得到的錯誤,但我可以告訴你,問題是你的輸出代碼在JSON對象被加載之前執行。 試試這個:

$.getJSON("mydata.json", function(obj) { 
    console.log("load success"); 
    Object.keys(obj[2].type).forEach(function(key) { 
     console.log(key, obj[key]); 
    }); 
}); 
0

下面是做到這一點的JS功能的方法:

var types = $.getJSON("mydata.json").done(function(response) { 
     return Object.keys(data["types"]).map(function(element){ 
      return element.type; 
     }).join(' '); 
    });    

    console.log(types);