2012-11-02 4 views
0

하나의 객체가 노드와 링크로 구성된 JSON 배열이 있습니다.JSON 배열에서 객체로 변환 한 후 정의되지 않은 값

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

이것은 모두 괜찮습니다. 예를 들어 링크에 액세스하기 위해 데이터 [0] .links를 사용해야합니다. 약간 짜증이납니다. 나는 배열을 객체로 만들고 싶습니다. 그래서 data.links는 링크에 대한 액세스를 제공합니다.

data = data[0]; 

을하지만 객체의 배열, data.links는 "정의되지 않은".IT는 특정 요소가 예를 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]'는'foo'를 평가 한 결과 인'Array' 생성자의 속성을 찾습니다. –

+0

_ '개체의 배열 data.links가 "undefined"로 표시됩니다. _ _ 표시 방법? 더 많은 코드와 실제로 유효한 JS 인 데이터의 실제 사례를 보여주십시오. 표시하는 데이터의 경우,'data = data [0]'을 실행 한 후에'data.links '라고하면 링크 배열이 주어 지므로 각 링크에'data.links [0] ]'등. (그런데 JSON은 문자열 형식입니다.) – nnnnnn

+0

@nnnnnn : 문제를 명확히하기 위해 질문을 편집했습니다. – graphmeter

답변

1

솔루션의 몇 가지 : 당신은 JSON 출력을 제어하는 ​​경우

, 단순히 사람들은 기본적으로 배열에서 개체를 래핑 둘러싸는 괄호 []를 제거합니다.

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

JSON을 제어하지 않으면 배열의 0 인덱스를 실제로 작업 할 변수에 할당하면됩니다.

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

불행히도 '링크'는 배열입니다. 해당 배열의 멤버에 액세스하려면 해당 인덱스 값에 액세스해야합니다.

+0

답변을 주셔서 감사합니다. 직접 괄호없이 설정하면 문제가 없습니다. 그러나 개발자 도구에서 객체를 볼 때 노드 및 링크 배열에서 정의되지 않은 값과 동일한 문제가 발생합니다. 예 : data.nodes [1] .name = "undefined". – graphmeter

+0

@graphmeter -'nodes'는 배열이고'name' 속성을 가지고 있지 않기 때문에 - 배열 안에있는 아이템들은'name' 속성을 가지고 있습니다. (아마도 여러분은 질문에 그것을 보여주지 않을 것입니다). 첫 번째 것은'data.nodes [0] .name'이라고해야합니다. 루프에있는 변수를 사용하여 차례대로 액세스하십시오. – nnnnnn

+0

죄송합니다, 올바른, data.nodes [x] 여야합니다. – graphmeter

관련 문제