从JSON对象到Tableview

时间:2012-01-27 22:14:36

标签: javascript json titanium appcelerator appcelerator-mobile

我现在已经搞砸了一段时间,但我似乎无法完成它。

我从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中使用它。有人可以帮帮我吗?感谢。

3 个答案:

答案 0 :(得分:2)

正如skypanther已经指出的那样。你需要将你的json字符串解析为一个对象。它在json.org得到了很好的解释。将字符串解析为对象后,可以轻松访问其成员并创建tableview行。

/* 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 :(得分:1)

responseText给你一个字符串。您希望它成为一个对象,在您尝试时将其循环或将其放入表中。尝试JSON.parse(this.responseText)来获取该对象。

table.data属性需要一个对象数组,其属性与Ti.UI.TableViewRow对象的属性对齐。我没有尝试将您的代码放入项目中。但看起来你的JSON数据如果被转换为一个对象,就会很好地排列。

换句话说,table.data = JSON.parse(this.responseText)应该可以工作。变量可能不在范围内,因此您可能需要做的不仅仅是将该行放入onload回调中。

答案 2 :(得分:0)

将字符串转换为对象后(通过JSON.parse),可能有助于获得该对象的直观表示 - 您可以在此处使用我的dp_debug组件执行此操作:

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

这不是直接解决你的问题,但它会准确显示该对象“看起来”的样子。

它很古老(在JS术语中很古老)但我仍然觉得它对这类事物非常有用。希望它有所帮助。