首先,我应该指出我使用http://jsonlint.com验证了我的JSON对象,它确实是有效的。
现在已经不在了,我正在查看YUI DataTable的示例,特别是示例使用的数据源和JSON对象的结构(请参阅http://developer.yahoo.com/yui/examples/datatable/dt_basic.html)。
基本示例使用如下组成的DataSource:
YAHOO.example.Data = {
bookorders: [
{id:"po-0167", date:new Date(1980, 2, 24), quantity:1, amount:4, title:"A Book About Nothing"},
{id:"po-0783", date:new Date("January 3, 1983"), quantity:null, amount:12.12345, title:"The Meaning of Life"},
{id:"po-0297", date:new Date(1978, 11, 12), quantity:12, amount:1.25, title:"This Book Was Meant to Be Read Aloud"},
{id:"po-1482", date:new Date("March 11, 1985"), quantity:6, amount:3.5, title:"Read Me Twice"}
]
}
而我的JSON对象如下所示:
[
{
"Listing": {
"Name": "Jay",
"Address": "Main Street",
"City": "New York"
}
},
{
"Listing": {
"Name": "Thomas",
"Address": "Union Street",
"City": "New York"
}
},
{
"Listing": {
"Name": "Jason",
"Address": "Square Street",
"City": "Boston"
}
}
]
以下是Yahoo的示例如何指定数据源以及与之相关的一些其他行:
var myDataSource = new YAHOO.util.DataSource(YAHOO.example.Data.bookorders);
myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSARRAY;
myDataSource.responseSchema = {
fields: ["id","date","quantity","amount","title"]
};
在我的JSON对象中,每个“Listing”都是YUI DataTable中的一行。我需要在YUI代码中修改什么才能使它与我的JSON对象一起使用?
谢谢。
答案 0 :(得分:0)
上面你定义了一个对象,带有一个未命名的对象数组,每个对象都由另一个对象组成,带有成员。虽然这可能是有效的JSON,但我认为这不符合YUI数据表的期望。这更像是一种人为或模糊的挑战。
我无法使用现有的JSON对象提供方法。虽然你的JSON是有效的,恕我直言,我不相信它与YUI数据表兼容。
我认为你需要一个包含命名对象数组的对象,这些对象包含成员而不是其他对象。现有数据结构中有太多层,对我来说没有明显的用途。
下面的“更改”意味着更改YAHOO提供的基本数据表示例。
简单地重建您的数据,
YAHOO.example.Data = {
Listing: [
{
"Name": "Jay",
"Address": "Main Street",
"City": "New York"
},
{
"Name": "Thomas",
"Address": "Union Street",
"City": "New York"
},
{
"Name": "Jason",
"Address": "Square Street",
"City": "Boston"
}
]
};
将简化您的数据结构并使其发挥作用。考虑到这些限制因素,我认为这是最小的变化。
然后更改数据源:
var myDataSource = new YAHOO.util.DataSource(YAHOO.example.Data.Listing);
和列defs
var myColumnDefs = [
{key:"Name"},
{key:"Address"},
{key:"City"}
];
最后是响应模式
myDataSource.responseSchema = {
fields: ["Name","Address","City"]
};
希望有所帮助。