2009-07-25 4 views
2

자바 스크립트를 처음 사용하고 객체에 저장된 일부 텍스트를 추출하려고합니다.개체 리터럴을 처리하는 방법은 무엇입니까?

개체는 개체 리터럴로 정의되어이 함수를 호출하는 Javascript script의 함수로 전달됩니다. 스크립트 (및 목적)이 구조를 가지고 :

객체는 "foo에"라는 이름의 콜백 함수에 전달됩니다
foo({ 
    "query": { 
    "count": "2", 
    "created": "2009-07-25T08:17:54Z", 
    "lang": "en-US", 
    }, 
    "results": { 
    "result": [ 
    { 
    "abstract": "<b>Pizza</b> Hut®. Order Online for Delivery or Carry-out. Fast &amp; Easy.", 
    "title": "<b>Pizza</b> Hut" 
    }, 
    { 
    "abstract": "Official site of Domino's <b>Pizza</b> delivery chain, which offers thin crust, deep dish, and hand tossed <b>pizzas</b> with a variety of side items and beverages. Site <b>...</b>", 
    "title": "Domino's <b>Pizza</b>" 
    } 
    ] 
    } 
} 
}); 

:

function foo(o){ 
    var out = document.getElementById('container'); 
    out.innerHTML = o.query.count; 
} 

내 문제 :은 내가를 인쇄하는 방법을 알고 위의 콜백 함수를 사용하여 쿼리 개수 변수를 반환하지만 결과 배열의 첫 번째 결과 제목을 출력하는 방법을 알지 못합니다.

어떻게 첫 번째 결과 제목을 표시하도록 콜백 함수를 변경할 수 있습니까? 또한 모든 결과에서 모든 제목을 인쇄 할 수있는 foreach 문이 있습니까?

감사합니다.

UPDATE : 다음 작업 않습니다 http://jsbin.com/ejiwa/edit

+0

질문이 잘못된 것입니다 - 당신이 JSON을 구문 분석하지 않습니다, 당신은 화합물과 자바 스크립트 변수 – zakovyrya

+1

@ 크리스 작동 : 코드에 오타가있어 - 당신은 당신의 전화의 마지막에 추가 닫는 괄호가 'foo()'에 추가하십시오. – RichieHindle

+0

@ 리치 : 고마워요. – chris

답변

4

:

o.results.result[0].title 

가 첫 번째 결과 제목을 얻기 위해이 코드에 대한 JSBIN가에있다? 모든 결과를 반복하려면 다음을 입력하십시오.

for (var i=0; i<o.results.result.length; i++) { 
    var result = o.results.result[i]; 
    alert(result.title); 
} 

편집 : 제대로 복사 했습니까? 여기에 내가 코뿔소에서 무엇을 얻을 : 당신은 JSON에서 볼 수 있듯이

js> o = { 
    "query": { 
    "count": "2", 
    "created": "2009-07-25T08:17:54Z", 
    "lang": "en-US", 
    }, 
    "results": { 
    "result": [ 
    { 
    "abstract": "<b>Pizza</b> Hutr. Order Online for Delivery or Carry-out. Fast &amp; Easy.", 
    "title": "<b>Pizza</b> Hut" 
    }, 
    { 
    "abstract": "Official site of Domino's <b>Pizza</b> delivery chain, which offers thin crust, deep dish, and hand tossed <b>pizzas</b> with a variety of side items and beverages. Site <b>...</b>", 
    "title": "Domino's <b>Pizza</b>" 
    } 
    ] 
    } 
} 

js> o.results.result[0].title 
<b>Pizza</b> Hut 
+0

아니요, 불행히도 그럴 수 없습니다 – chris

+1

@chris : ars의 코드가 완벽하게 작동하지만 코드 끝에 오타를 수정해야합니다. 마지막에 추가로 닫는 중괄호가 있습니다. 'foo()'에 대한 당신의 호출의. – RichieHindle

+0

이상한. 내 방금 붙여 넣은 출력을 참조하십시오. – ars

1

는, 객체는 객체의 배열입니다 "결과"라는 속성이 포함 "결과"라는 속성이 있습니다.

그 중 첫 번째를 표시하려면 이미 count로 수행했지만 단순히 제목의 구조를 따라하면됩니다.

var results = o.query.results.result; 
for(var i = 0; i < results.length; i++) { 

} 

JSON은 단순히 자바 스크립트 코드 : 각각의 결과를 반복 할

o.query.results.result[0].title 

,이 같은 예를 들어 배열과 같은 결과 속성을 통해 단순히 루프, 할 수있다. JSON 스 니펫을 JavaScript 객체 선언으로 생각하면 문제는 없습니다.

+0

다음 문 사용 : out.innerHTML = o.results.result [0] .title; 작동하지 않는 것 같습니다. – chris

+0

Ah figures .. o.query.results.result [0] .title은 올바른 경로입니다. P 붙여 넣은 JSON 스 니펫에 실수가있는 것 같습니다. –

1

o 매개 변수가 콜백 함수에 있는지 잘 모르겠습니다. 일반적으로 XMLHttpRequest 또는 ActiveXObject를 전역 var req에 할당합니다.

그런 다음 콜백을 사용

완전히 서버를 신뢰하고 데이터가 서버가 클라이언트를 보내는 경우에만() 평가 후면 사용해야 함을 주목해야한다
function json_callback() { 
    if (req.readyState == 4) { 
      if (req.status == 200) { 
        jsonObj = eval("(" + req.responseText + ")"); 
        var out = document.getElementById('container'); 
        out.innerHTML = jsonObj.query.count; 
      } 
     } 
} 

. 사용할 수있는 JSON 파서는 실제로 eval()보다 빠르며 eval()은 JSON으로 만 제한되므로 보안 위험이 될 수있는 모든 JavaScript를 구문 분석하고 실행할 수 있습니다. ECMAScript의 다음 버전에는 표준 JSON 파서가 내장 될 것으로 예상됩니다.

1

actual object은 작성한 것과 약간 다른 구조를 가지고 있습니다. results은 실제로는 query의 요소입니다. 그래서이 시도 :

o.query.results.result[0].title 
+0

코드를 정교화하려고 시도하는 동안 실수를 저질렀다고하지만 방화범이 전합니다 : o.query.results is undefined – chris

+0

야후의 원본 데이터를 실행할 때 유용합니다. 'function foo (o) {return o.query.results.result [0] .title; }'는'피자 오두막'을 반환합니다. – Gumbo

+0

신경 쓰지 마세요, 당신 말이 맞아요. 감사!!! – chris

관련 문제