2012-03-18 3 views
10

나는 서버에 어떤 요청을 보내고 그것은 나에게이 회신입니다 :Javascript에서 JSON (서버 응답)을 읽는 방법?

{"COLUMNS":["REGISTRATION_DT","USERNAME","PASSWORD","FNAME","LNAME","EMAIL","MOBILE","FACEBOOK_ID"],"DATA":[["March, 17 2012 16:18:00","someuser",somepass,"somename","somesur","someemail",sometel,"someid"]]} 

나는 많이 시도했지만 아무것도 나를 위해 일하는 것 같다!

var xml2 = this.responseData; 
var xml3 = xml2.getElementsByTagName("data"); 
Ti.API.log(xml3.FNAME); 

이 코드의 경우 "null"이 표시됩니다.

도움이 될 것입니다.

답변

5

JSON 형식을 사용하려는 경우 [...] 내의 데이터도 쌍으로되어 있어야하며 {...} (here)으로 그룹화해야합니다. 예를 들어

,
{ 
     "sales": [ 
     { "firstname" : "John", "lastname" : "Brown" }, 
     { "firstname" : "Marc", "lastname" : "Johnson" } 
     ] // end of sales array 
    } 

그래서 당신은 할 수 있습니다 서버가 당신에게 당신이 res으로 참조 무언가를 보내는

{"COLUMNS": [ 
    {"REGISTRATION_DT" : "19901212", "USERNAME" : "kudos", "PASSWORD" : "tx91!#1", ... }, 
    {"REGISTRATION_DT" : "19940709", "USERNAME" : "jenny", "PASSWORD" : "fxuf#2", ... }, 
    {"REGISTRATION_DT" : "20070110", "USERNAME" : "benji12", "PASSWORD" : "rabbit19", ... } 
] 
} 

경우, 당신은 단지 그것을 구문 분석이 작업을 수행 할 수 있습니다 자바 스크립트 :

var o=JSON.parse(res); 

다음과 같이 각 인스턴스를 co lumns 좋아 다음과 http://jsonlint.com/의 코드 밖으로

for (var i=0;i<o.COLUMNS.length;i++) 
{ 
     var date = o.COLUMNS[i].REGISTRATION_DT; .... 
} 
+0

줄에 구문 오류가 발생했습니다. var o = JSON.parse (res); 제발 제안 해주세요. 간단한 자바 스크립트와 IE8을 사용하려고합니다. –

3

는 JSON 객체는 그냥 일반 자바 스크립트 객체 나 사전

귀하의 경우, 열
// You can do it this way 
var data = this.responseData["DATA"] 
// Or this way 
var data = this.responseData.DATA 

데이터가 모두 배열처럼 작동 jQuery.parseJSON을 확인하는 것이 좋습니다 COLUMNS의 "FNAME"요소에 해당하는 데이터에서 요소를 가져 오려고하는 것 같습니다.

var columns = this.responseData["COLUMNS"]; 
var data = this.responseData["DATA"][0]; 

for(var i=0; i<columns.length; i++){ 
    if(columns[i] == "FNAME"){ 
     Ti.API.log(data[i]); 
    } 
} 

EDIT : 서버 측의 데이터를 변경할 수 없으면 자신 만의 개체 클라이언트를 만들 수 있습니다. 이것은 여러 열 (아마도)을 참조해야하는 경우에도 도움이됩니다.

var columns = this.responseData["COLUMNS"]; 
var data = this.responseData["DATA"][0]; 
var realData = {}; 

for(var i=0; i<columns.length; i++){ 
    realData[columns[i]] = data[i]; 
} 

// Now you can access properties directly by name. 
Ti.API.log(data.FNAME); 

더 편집 : 나는 원래 오해 때문에 내 대답은, 데이터의 첫 번째 행을 고려하십시오. 다른 사람들을 어떻게 처리할지 알아 내려고합니다.

+1

서버가 응답하는 형식을 변경하는 방법이 있으면 Nick의 제안과 비슷하게 보이도록 권장합니다. 당신이 지금 가지고있는 포맷은 작업하기가 꽤 추합니다. –

3

해당 링크 참조. READ JSON RESPONSE

완벽합니다.

+0

PHP를 사용하여 JSON을 읽을 수있는 비슷한 리소스가 있습니까? –

0

당신이 여기에 (내가 그랬던 것처럼) [Response object]에서 읽을 수있는 방법을 찾기 위해 노력하고있어 경우 - 도울 수있는 일이 : 을 - 당신은 콘솔에 로그인하기 전에 약 res.json()을 잊지 말고 가져 오기 사용하는 경우

fetch(`http://localhost:3000/data/${hour}`, { 
     method: 'get' 
    }) 
    .then(res => { 
     return res.json() 
     }) 
    .then((response) => { 
     console.log('res: ' + JSON.stringify(response)) 
    }) 
-1

그냥 사용 JSON.parse(serverResponse)

+0

이것은 너무 짧은 답변입니다. 그것은 주석으로 더 유용 할 것입니다. 솔루션에 대한 설명을 확장하십시오. 예를 들어'serverResponse' 란 무엇입니까? OP는 그러한 변수에 대해 언급하지 않았고 설명하지 않았습니다. –

+0

이 질문에 대한 답을 제공하지 않습니다. 비평하거나 저자의 설명을 요청하려면 게시물 아래에 의견을 남겨 둡니다. - [리뷰 작성] (리뷰/저품절 게시물/17080918) –

관련 문제