问题描述
|
首先,我应该指出,我已经使用http://jsonlint.com验证了我的JSON对象,并且确实有效。
到目前为止,我正在研究YUI数据表的示例,特别是示例使用的数据源和JSON对象的结构(请参阅http://developer.yahoo.com/yui/examples/datatable /dt_basic.html)。
基本示例使用如下组成的数据源:
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\",{
\"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对象一起使用?
谢谢。
解决方法
上面已经定义了一个对象,该对象具有未命名的对象数组,每个对象由另一个具有成员的对象组成。尽管这可能是有效的JSON,但我认为这与YUI数据表的期望不兼容。这更多是一个人为的或难以理解的挑战。
我无法提供一种使用现有JSON对象的方法。虽然您的JSON有效,恕我直言,但我认为它与YUI数据表不兼容。
我认为您需要一个对象,该对象包含具有成员的对象的命名数组,而不是其他对象。对我来说,现有数据结构中有太多层没有明显目的。
下面的\'Change \'表示更改了YAHOO提供的基本数据表示例。
像这样简单地重组数据,
YAHOO.example.Data = {
Listing: [
{
\"Name\": \"Jay\",\"Address\": \"Main Street\",\"City\": \"New York\"
},{
\"Name\": \"Thomas\",\"Address\": \"Union Street\",{
\"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\"]
};
希望能有所帮助。