0

나는 잠시 동안 이것에 대해 주위를 어지럽 혀왔다. 그러나 나는 그것을 끝내는 것처럼 보이지 않는다.JSON 개체에서 Tableview로

내 API에서 JSON 데이터로 다시 작업을받습니다. 데이터는 Ti.API.info(this.responseText) 인쇄, 다음과 같습니다

[INFO] [{"created_at":"2012-01-09T15:05:25Z","description":"Smullen van onze pizza","id":1,"title":"Pizza Eten","updated_at":"2012-01-09T15:05:25Z","user_id":11},{"created_at":"2012-01-09T15:05:25Z","description":"Lekker Lekker!","id":21,"title":"Ice-Tea Drinken","updated_at":"2012-01-09T15:05:25Z","user_id":11}] 

나는이 데이터를 처리하는 방법을 아주 확실하지 않다. 나는 몇 가지 시도 :

getData.onload = function(){ 
    var tasks = this.responseText; 
    for(t in tasks) { 
     Ti.API.info(t); 
    } 
     } 

을이 인쇄 :

[INFO] 0 
[INFO] 1 
[INFO] 2 
[INFO] 3 
[INFO] 4 
[INFO] 5 
[INFO] 6 

해봤 또 다른 것은 306까지였다

:

var tasks = this.responseText; 
for(t in tasks) 
{ 
    if(tasks.hasOwnProperty(t)) 
    { 
     Ti.API.info(t + " -> " + tasks[t]); 
    } 
} 

이가 내게 준

[INFO] 0 -> [ 
[INFO] 1 -> { 
[INFO] 2 -> " 
[INFO] 3 -> c 
[INFO] 4 -> r 
[INFO] 5 -> e 
[INFO] 6 -> a 
[INFO] 7 -> t 
[INFO] 8 -> e 
[INFO] 9 -> d 

또 다른 시도 :

var tasks = this.responseText; 
for(t in tasks) 
{ 
    Ti.API.info(t.title); 
} 

가 준 :

[INFO] <null> 
[INFO] <null> 
[INFO] <null> 

나는이 JSON 및 방법 '준비'하는 방법이 그래서가있는 TableView에서 사용할 수를 처리하는 방법을 정말 혼란 스러워요. 누구나 나를 도와 줄 수 있니? 감사.

답변

2

이미 skypanther로 지적했습니다. 당신은 객체에 json 문자열을 구문 분석해야합니다. 그것은 json.org에 잘 설명되어 있습니다. 문자열을 객체로 파싱 한 후에는 멤버에 액세스하고 테이블 뷰 행을 만드는 것이 쉽습니다.

/* create the tableview row */ 
makeTableViewRow = function(_object){ 

    var row = Ti.UI.createTableViewRow({ 
    ... 
    }] 

    var title = Ti.UI.createLabel({ 
    ... 
    text: _object.title, 
    ... 
    }); 
    row.add(title); 

    return row; 
}; 


getData.onload = function(){ 
    var tasks = json.parse(this.responseText), /* parse the json string */ 
     _rowsForTableView = []; /* put the rows in here */ 

    /* create the rows */ 
    for (i in tasks){ 
    var _row = makeTableView(tasks[i]); 
    _rowsForTableView.push(_row); 
    }; 

    myTableView.setData(_rowsForTableView); 

}; 
1

responseText에서 문자열을 제공하고 있습니다. 당신이 시도하고있는 것처럼 루프를 돌리거나 테이블에 두는 것은 객체가되고 싶습니다. JSON.parse (this.responseText)를 사용하여 해당 객체를 가져 오십시오.

table.data 속성은 개체 배열을 필요로하며 속성은 Ti.UI.TableViewRow 개체의 속성과 일치합니다. 나는 당신의 코드를 프로젝트에 넣으려고하지 않았다. 그러나 JSON 데이터가 객체로 변환 된 경우에는 잘 정리되어 있습니다.

즉, table.data = JSON.parse (this.responseText)가 작동해야합니다. 변수가 범위에 포함되지 않을 수 있으므로 onload 콜백에 해당 행을 추가하는 것 이상의 작업이 필요할 수 있습니다.

+0

JSON을 넣으면.라인을 구문 분석하고 다음을 수행하십시오 (작업에 t)에 대한 \t \t \t { \t \t \t \t Ti.API.info (t.title); \t \t \t} 나는 여전히 을 두 번받습니다. 그것에 대해 어떤 생각? 빠른 답변 감사합니다. – cabaret

+1

성명서에서 "t"는 작업 배열의 색인입니다. 그것은 대상 자체가 아닙니다. tasks [t] .title은 예상 한 결과를 산출합니다. –

0

당신은 그 객체의 시각적 표현을 얻을하는 데 도움이 될 수 있습니다 (JSON.parse를 통해) 객체를 문자열로 변환하면 - 당신이 여기 내 dp_debug 구성 요소와 그 작업을 수행 할 수 있습니다

http://depressedpress.com/javascript-extensions/dp_debug/

그것은이다 당신의 문제를 직접적으로 해결하는 것이 아니라 그 물체가 "보이는 것"을 정확하게 보여줄 것입니다.

옛날 (JS 용어로 고대)이지만, 나는 아직도 이런 종류의 일에 미친 듯이 유용하다고 생각합니다. 희망이 도움이됩니다.