2012-11-02 38 views
0

我有一個由節點和鏈接組成的對象的JSON數組。從JSON數組轉換爲對象後未定義的值

data = [Object]=[ { nodes: Array[..] ,links: Array[…] } ] 

這很好,但對於訪問鏈接例如我不得不使用data [0] .links,這有點煩人。我希望數組是一個對象,這樣data.links就可以訪問鏈接。我試圖設置:

data = data[0]; 

但隨後的物體的陣列中,data.links,被顯示爲「未定義」。看來當特定的元件被訪問時所顯示的值,例如data.links[3].name等。這是爲什麼?

編輯:

更具體地:

如果數據= [{節點:數組[...],鏈接:數組[...]}] =>

console.log(data[0].links); //shows the data[0].links[0].name = value in the console 

如果數據= {節點:數組[...],鏈接:數組[...]} =>

console.log(data.links); //shows data[0].links[0].name = undefined 

但有趣的是

console.log(data.links[0].name); //shows the correct value. 
+0

這是什麼表示法?在JS中,'[Object]'是一個包含內建對象構造函數的數組,'Array [foo]'查找'Array'構造函數的屬性,其名稱是對'foo'的評估結果。 –

+0

_'然後,對象data.links的數組顯示爲「undefined」_ - 顯示如何?請顯示更多的代碼,也許是更真實的數據實例,它們實際上是有效的JS。對於你顯示的數據,如果你說'data.links',在完成'data = data [0]'之後,它會給你鏈接數組,所以你必須使用'data.links [0 ]'等等。(順便說一下,在你的問題中沒有任何JSON - JSON是一種字符串格式。) – nnnnnn

+0

@nnnnnn:我編輯了問題以澄清事情。 – graphmeter

回答

1

一對夫婦的解決方案:

如果你控制了JSON輸出,只要將封閉支架[]這些基本上都是包裝的對象的數組。

data = { nodes: [...] ,links: [...] }; 

如果您不控制JSON,只需將數組的零索引分配給您實際想要使用的變量即可。

json = [ { nodes: [...] ,links: [...] } ]; 
data = json[0]; 

不幸的是,'links'是一個數組。要訪問該數組的成員,您需要訪問其索引值。

+0

感謝您的答案,直接設置它沒有括號工作正常。但是,在開發人員工具中查看對象時,我仍然遇到與節點和鏈接數組中的未定義值相同的問題。例如:data.nodes [1] .name =「undefined」。 – graphmeter

+0

@graphmeter - 這是因爲'nodes'是一個數組並且沒有'name'屬性 - 數組中的items包含'name'屬性(大概是這樣的;你不會在問題中顯示它)。你必須說第一個'data.nodes [0] .name';在循環中使用變量來依次訪問每個變量。 – nnnnnn

+0

抱歉,正確的應該是data.nodes [x]。 – graphmeter