2016-09-15 4 views
-1

나는 D3에서로드 JSON은과 같이 수행이 오류를 생성하지 않는 것을 알고 :D3을 사용하여이 JSON 데이터에 액세스하려면 어떻게해야합니까?

이 블록 내부
d3.json("sample_data/unique_items.json", function(json) { 
    // do something 
}); 

, 나는 다음 json 변수를 사용하여 JSON 파일을 참조합니다. 다음은 JSON의 샘플 구조입니다.

{ 
    "unique_items": [ 
    { 
     "name": "Blah", 
     "items": [ 
     {"id": 1, "note": "blah"}, 
     {"id": 2, "note": "blah blah"}, 
     {"id": 3, "note": "blah blah blah"} 
     ] 
    }, 
    { 
     "name": "Blah2", 
     "items": [ 
     {"id": 1, "note": "blah"}, 
     {"id": 2, "note": "blah blah"}, 
     {"id": 3, "note": "blah blah blah"} 
     ] 
    } 
    ] 
} 

이 구조의 항목에 액세스하는 방법에 어려움을 겪고 있습니다. 그래서 예를 들어 나는 이것을 시험으로 시도했다 :

for (var item in json["unique_items"]) { 
    if (json["unique_items"].hasOwnProperty(item)) { 
    console.log(item["name"]); // 'undefined' error on this line 
    } 
} 

위와 같이 주석 된 행에 정의되지 않은 오류가 발생한다. 나는 콘솔에서 볼 기대 : 나는 console.log(item.name);에 그 라인을 변경하려하지만이 같은 오류가 발생

Blah 
Blah2 

. 그런 다음 간단히 console.log(item);으로 변경했으며 콘솔 출력은 0입니다. 나는 이것을 이해하지 못한다.

그래서 제 질문은 다음과 같습니다

  1. 가 어떻게 unique_items 내 요소에 액세스합니까?
  2. json을 구조화하는 더 좋은 방법이 있습니까?

답변

1

노력이

for (var key in json["unique_items"]) { 
    var item = json["unique_items"][key]; 
    if (item) { 
    console.log(item["name"]); 
    } 
} 
+0

그것을 해결 그! 그 때 무슨 일이 일어 났는지 봅니다. 첫 번째 반복은 배열 (0)에서 인덱스/위치를 가져오고 배열 내의 해당 인덱스를 사용하여 해당 항목에 액세스해야합니다. 고맙습니다! – Dan

+0

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of에서 for .. 대신 .. of .. ..를 사용했다면 올바른 아이디어를 얻었을 것입니다. –

관련 문제